Server-side binding and state for joining users

Management of users who have clicked join, but not yet connected.
Add front-end UI for joining participants

Also, move add/remove joining participant logic entirely to
server-models, we don't need it on the client.
Add tests for joining participants
Refactor session joining and HoA status

Refactor the /session/:sessionKey redirect to split out hangouts-on-air
into a separate handler.

Add new views which handle error states in joining regular hangouts or
hangouts-on-air. For regular hangouts, display a "session is full"
warning if joiningParticipants and connectedParticipants total more than
MAX_ATTENDEES, rather than letting the users encounter the error when
they get to google.  For hangouts-on-air, add interstitials which warn
when another user is in the process of creating a hangout-on-air, or
when the hangout-on-air url has expired and a new one needs to be
created.

Refactor HoA socket wiring to be more verbose -- communicate changes
with the (admin) clients whenever any of hangout-pending,
joiningParticipants, or connectedParticipants changes.  Use this to
update the "join/create hangout" button and mute status.  The result
should be more aggressive muting that persists through refreshes and
more correct display of the hangout button without requiring a refresh.
Ensure that hangout URLs expire correctly
Cache errors from youtube API; fix notice email

Fix the notification email to not warn about <a href> transformations that
don't change the target.

Cache error responsees when looking up thumbnails/titles of youtube
videos so we don't keep re-querying them on every redraw.