Chat responsible for storing it's own messages, makes code simpler and lets us keep history when leaving party/lobby
Add a bunch of caching to Friend, invalidate cache on PersonaStateChange callbacks - lets us use this more innocently without worrying about performance everywhere - e.g Friend.GetAll().Where( x => x.IsOnline ).Count() was eating 3-4ms with only ~20 steam friends, much worse with more pals