* MM-63925 Remove most nested transactions from channel_store_categories.go
There's one place which still has a nested transaction in
CreateInitialSidebarCategories, but that's because it's calling out to a
different part of the store. The only way to avoid that would be to
break the extraction like UpdateSidebarCategories does to update
preferences, but I chose not to follow that pattern here and leave it
as-is.
* MM-63923 Prevent deadlocks caused by updating multiple categories in a different order
* MM-63923 Prevent deadlocks while deleting from SidebarChannels
This could also have been resolved by sorting the categories, but
combining the queries seems a bit more elegant.
* MM-63924 Ensure adding SidebarChannels rows is idempotent
* Add additional test to cause deadlocks
* Prevent channels from appearing in a single category multiple times
* Other review feedback