first stab at #489

This pull request changes the way expressions are dealt with if they can (potentially at least) be resolved as keypaths. For example `foo["bar"]` is equivalent to `foo.bar`, and `foo[bar]` might become `foo.qux` or whatever. By identifying these expressions at parse time, and treating them differently at render time, we can now enable two-way binding on them. This is particularly useful when creating two-way bindings with nested arrays.