Clarify and refactor session "state".

Reduce the parameters indicating the state of a session to:
 - "hangout-start-time": null for stopped sessions, integer for running.
 - "hangout-url": null for stopped sesesions, URL for running.
 - "hangout-pending": indicator that a user is currently creating a
   non-farmed URL for this hangout.
 - "connectedParticipants": list of currently connected participants.

There are thus only three fully valid states:
 - started: {
    "hangout-start-time": <int>,
    "hangout-url": <string>,
    "hangout-pending": null,
    "connectedParticipants": [list of length more than 0],
   }
 - stopped: {
    "hangout-start-time": null,
    "hangout-url": null,
    "hangout-pending": null,
    "connectedParticipants": []
   }
 - pending: {
    "hangout-start-time": null,
    "hangout-url": null,
    "hangout-pending": {time: <int>, ...},
    "connectedParticipants": []
  }

Any other combination of state parameters -- a hangout-url with no
participants, a hangout-start-time with no hangout-url, etc. is an error state.
Update the interface in /admin/ to reflect this, displaying an error icon and
explanation for any state other than the above. Add a ``session.getState()``
method to return the current session state.

As a simplification, remove "hangoutConnected", which was a less precise
description of the "started" state described above.  All methods that
previously changed this property to trigger "onHangoutStarted" or
"onHangoutStopped" now call those methods directly.

"onHangoutStopped" now brings the session, regardless of the current state, to
a fully "stopped" state.  Change the "stop session" endpoint to support both
permalink sessions and event sessions to allow cleaning up broken sessions.
Fix popover placement and container
Add pending overdue error state
Add apt-get update to travis.yml
Increase timeout for reconnecting socket test
Merge branch 'master' into simplify-session-state
Merge branch 'master' into simplify-session-state

Conflicts:
	lib/unhangout-sockets.js
	test/test.session-joining.selenium.js
Merge branch 'nocdn' into simplify-session-state

Conflicts:
	lib/server-models.js
	lib/unhangout-server.js
	public/js/event-app.js
	public/js/event-views.js
	public/js/models.js
	views/admin-event.ejs
Fix problems from merge, requirejs-ify admin.ejs
Increase timeout for server tests
UI tweaks for admin page
Pre-load facilitator.js for better performance in production
Merge branch 'master' into simplify-session-state

Conflicts:
	public/js/admin.js
	views/admin.ejs
Add session "stopping" state; handle restarts

Add a "stopping" state (and associated persisted value,
"hangout-stop-request-time") to more cleanly handle state of sessions
that are stopping.  Add handlers to onRestart which restore timers for
expiration and stopping of sessions on server restart.