This change set exposes an API for state changes.

This set of changes allows tools to record their current state as an
entirely separate step in the current history, without reloading the
tool itself. This means that tools do not have to implement an undo
mechanism, as long as they can record their current state in a memento.

The message name is 'change-state', and expects a message of the same
form as a new step ({title :: string, data :: object}) with the
exception that the 'tool' property is forbidden - it will in fact be
ignored and overrided if supplied. This mechanism is designed for
loading different states into the same tool - changing tools in this way
is not supported. For that use 'next-step'.

Changes include:
  * Thorough OO rewrite of history.coffee, which had got far too long.
  * Changes to controllers.coffee to support this (storing the instance
    on the scope).
  * Changes to the iframe directive to prevent reloading - this
    directive only supports loading once.
  * The addition of a new external library to force angular to accept a
    silent path change, with the appropriate config changes in
    bower.json, frontpage.coffee and bootstrap.coffee. This is harder
    than it looks, as angular really doesn't support this kind of thing,
    providing no way to cancel the route application. Their philosophy
    is that paths should represent things that can be rendered, so why
    not render them. Which is kind of reasonable unless, as in our case,
    rerendering is expensive and intrusive (page flicker) and
    unnecessary. It is also double dumb since they provide a mechanism
    for ignoring some kinds of path updates (search query parameters) so
    the idea is obviously out there. This might be a source of annoyance
    for future maintenance.