socket: it works! you can talk to yourself now

TODO/BRAINDUMP
- the old system was to create a message M, add it to the room, send it to the server, and the server never replied
  the new system is to create a message M, send it to the server, wait for server to send it back, and then add it to the room
  this should allow for an O(1) Room.publish()
  and will also allow us to give the user better feedback on failure modes
  but we insert an intermediate message M' into the room and then replace it with M when it returns for responsiveness
  after T seconds, we can transition M' into a waiting state to signal to the user something is wrong
  and after U seconds, we can transition M' into a failure state
- still have to unify the two client-side routing systems sigh
- i'd like to try out knockout-es5 so that we don't have to keep calling properties
  kevin is using it in dbfarm and greatly recommends it
- love the backend api
server: it works! you can chat now!

TODO/BRAINDUMP
- old system: create message M, add M to room, send M to server, server never talks back
  new system: create message M, add M' to room, send M to server, server sends back M, replace M' with M
  i still don't have this system rigged up but the motivation is
  - O(1) Socket.publish()
  - better indication of message-send failures
    - put M' into a waiting/throbber mode after delta seconds
    - put M' into a failure mode after epsilon seconds
- knockout-es5: kevin used it for dbfarm, i should add it in
  so we don't have to keep calling properties
- love the backend api