Fix Keyspaces with assign_fields().

This makes behaviour of Keyspaces somewhat easier to understand as fields must
be explicitly fixed.
Part-finished Keyspace integration.

Not inculded:

* Ensuring keys are specified in one pass and then the fields are fixed in
  another.
* Unit test updates