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.
minor cleanup of method names.
Get join again button back in.
Merge
Merge pull request #3 from jsuereth/wip/ui-stuffs

Merge
Fix javascript scoping issue.
Various fixes:

* Detect winning/end of game correctly.
* Don't remove click listeners, since this breaks the next game.
Fix lose detection.
Remove unused css/data-page
make websocket a library, fix debug page.