Rewrite to use ImmutableJS

TODO: README