Add history and bookmark support.

Large change.

Reworks how data propagates around the page. Core concept is that the
URI of the window is king. When page loads on /programmes, the page
loads the programmes table only. The programmes table has onClick
handlers on each row. All those handlers do is call
history/update-token-ids with the row id and some table identifier. This
add a 'token' to the URI (basically a trailing #something). The token is
considered an opaque string. It looks like:

{:args {:ids {:programme <sha1 of selected programmes row>
              :project <sha1 of selected programmes row>
              ...
             }}
 :search <some string (url encoding should work).

The history object (provided by google closure's goog.History) allows
registration of a listener on the history and we register one and put
the change events onto a core.async channel. Each table has a (ajax ...)
section which is a go-loop processing history token changes. The
history-channel is linked to each of the (ajax ...) blocks via a
core.async multiplex. Basically they get the map shown above and can
decide what to do. Mostly they build a URL to hit the AMON API, filling
in parts of the URI using the ids from the token.

There are a few other subtlties - we store the selected id for each
table in the app-model, this makes it easier to add dynamic
titles (e.g. Projects - <selected row in programmes). The titles could
be components themselves and also listen to history but that seems like
overkill, we may consider that if the requirements become more complex.