Massive knockout.js cleanups.

* Use one object to represent the app.
* split into 'direct state', 'derived state', 'socket actions' and 'ui actions'.
* Create custom binding for the board, using JQuery for events and rendering.
* Try to lay out the steps we walk through in the talk.