Add Field model and tests

This adds the base for a structured field definition, which gets us
away from just using simple coercion functions to define our fields.
That gets messy and spreads code to coerce data apart from the
serialization and deserialization bits.

This aims to unify and better define our data types in objects.
Note that this change doesn't affect any of the *actual* format
of the fields, which is highlighted by the general lack of change
to the actual object tests as a result.

Related to blueprint structured-object-fields

Change-Id: I3bd8441f11c3bc599b9a6250d31ae1ece4165ecb
Merge "Add Field model and tests"