Fix 0.8.1 regression in ROOT_URL with path

Fixes #2109.
Add credential secret argument to `retrieveCredential` functions.

Fixes #2118.
Unregister sessions from server when their heartbeats time out.

Conflicts:
	History.md
Update History.md
Make a History sentence more sentence-y
docs: turn off appcache on safari

Turns out AppCache on Safari 7 is totally broken (see
http://stackoverflow.com/questions/22888945/safari-7-application-cache-does-not-work).
This, combined with our "reload if you can't load CSS or JS" strategy for
multi-server deploy causes infinite reloads in some cases.

Hopefully this will resolve the sporadic complaints we get
from some users about infinite reloads.
Update banner and notices
Update docs to 0.8.1.2
Update examples to 0.8.1.2
Merge branch 'release-0.8.1.2'
Merge branch 'master' into devel
Document UI.getElementData

While doing this, I realized that this function
can be called on text nodes as well, so it's probably
better named UI.getNodeData?
Remove statement about Rails and Django

Fixes #2142.  Apparently Django doesn't work precisely this way.
Clean up event handlers (untested)

Needs manual testing and then a unit test (that exercises multiple eventTypes as well).
Fix typo in DomRange event handler cleanup
Add a test for cleaning up event handlers when template is destroyed
Merge branch 'event-cleanup-cherrypick' into devel
Add credentialSecret to `Google.retrieveCredential`

I missed this one in 0fa591bc5.
Fix PollingObserveDriver error handling

The getRawObjects call can throw (eg, if you can't connect to the mongo
server for too long).  A few pieces of state were being corrupted in
that case:

- self._results was being set too early, leading to 'first' not being
  set on future _pollMongo calls, and_multiplexer.ready() never being
  called. This had two effects:

    - The observe (and thus any subscription) would never become
      ready().  Due to deduping, *no observe on this query* would
      ever become ready either.  This also implies that the
      observeChanges that are part of _publishCursor would never return,
      so the sub.onStop would never get called, so the observeHandle
      would never stop, leading not only to leaks, but for an inability
      for that query to ever stop being deduped with the corrupted
      PollingObserveDriver!

    - The onFlush calls would throw a "not ready" error instead of
      calling the callback, so (a) errors would be logged and (b) write
      fences would never be closed

  Fixed this by not writing to self._results at the top of the function.

- writesForCycle was being lost, so those write fences would never
  close. Fixed this by pushing writesForCycle back onto _pendingWrites
  if getRawObjects throws.
Fix accidentally-hardcoded Twitter URL in oauth1

Fixes #2154.