Rounding out the client side and adding Knockout support

Fairly large rewrite of the existing front end. Selected knockout because
it was fairly small in scope and does just enough for what we need to keep
things clean on the front end. 

Did not feel like subscribing to something as big as Ember or Angular.

We store the knockout session to localStorage so that a session can
be pulled right from the browser's local cache. This should also set things
up nicely to work offline in the future.

I squashed quite a few commits of the knockout refactor together, hence the big gap in time and small amount of commits.