introduce `useGetAvatarForThread` hook. When thinking about thread avatars, there are three main thread avatars we need to consider
# channels (most chats)
# private (the chat with yourself)
# personal (1on1 chat with another user)
This diff handles the first two cases, and the following diff will handle the second. Another thing we needed to consider when building this hook is that the thread avatar should be inherited when creating subthreads, and when we create a new channel, we should generate a new random avatar for it.
With all this in mind, the hook begins by grabbing all the necessary things for a private thread avatar (`viewer`) and handling subthreads inheriting parent avatars through some selectors. We then do four checks and return a `ClientAvatar` based on which check succeeds.
# The first check is a simple make sure we don't have a null thread. If, for some reason, that's the case, we will return our anonymous emoji avatar
# The second check is if we have an avatar already set; then we return that
# The third check is if the thread is a sidebar, then we want to return the parent thread's avatar, or if the parent thread does not have an avatar, we "rebuild" using `getDefaultAvatar`
# The fourth check is to see if the thread is private, then we want to return the viewers avatar
# If none of the cases are true, then we return a default emoji avatar using the thread's `id` as the hash key and the thread color as the emoji avatar background color
---
Depends on D7131