Key by id and clients and channels

Closes #52 
Closes #28 

Hey @devcritter and @BMartinos could you guys both look through this for code review. The changes reach pretty far. I want us to make sure these changes won't inadvertently break something. Luckily our test coverage made it easy for me to spot places where things broke :)