[WIP] Readonly view models

Initial code idea for how to have a different view model to your view compared to what you are posting back.

This allows for mass assignment protection without needing to remember to add `[ReadOnly]` attributes.

Thoughts @bendetat, @MattDavies, @joshka?

This is based on something @joshka sent me agessssss ago from memory.