Add wait-for-hangout-ready to tests
Move all broadcast logic to backbone listeners

As much as possible, make broadcasting dependent on changes in backbone
models' state, and triggered by events on the models, rather than fired
by other logic.  This is prep-work toward the end of supporting
Operational Transform-style syncing of state.
"lib/unhangout-sockets.js" should be the only server-side place where
Unhangout logic is aware of the fact that there is socket traffic.
Introduce client-side transport mgr, sync logs

Introduce a client-side manager for socket traffic, "transport", with
handling for updating state on registered state models and collections.

Change all server-side updates to be triggered by backbone model changes
rather than triggered by incoming socket messages.  This facilitates
changing state outside of the socket flow (e.g. in HTTP routes), as well
as enabling simpler grouping of similar state updates.  Make use of our
new `models.BaseModel.registerSubEvents` to replicate sub-collection and
sub-model events on the parent, making it simpler to register for
updates of dynamic child properties.

Add a new room-manager broadcast function, `sync`, which in addition to
broadcasting the message, stores a log of messages with which to catch
up clients who connect with a lag.  On first join, clients transmit a
timestamp representing the last time they had a data update, and the
room-manager now "catches them up" by transmitting all sync-ed messages
since the timestamp.  On each call to `sync`, the log is pruned of
everything older than OP_LOG_AGE (currently 60 seconds).  If a client
joins presenting a timestamp older than that, it's sent a
"stale-state-error", instructed to reload the page.  This should keep
all clients in sync regardless of lag between page load and message
arrival.
Reintroduce throttling, fix timestamp transmittal
Merge pull request #328 from drewww/op-sync

Maintain an operation log to better keep clients in sync