Add mvvm framework

pretty much a complete rewrite in order to use the features in Knockout.js. addresses issue #12