Merges when extending.
Improves usability of required and optional.
Checks that states exist.
Checks if the value is required.
Changes `required` to `optional`.

This reduces complexity as you can just do `optional` instead of `not
required`.
Fixes bug with optional fields.

Renames `value` to `actualValue`.
Returns `self` otherwise nothing is exposed.
Begins to specify field.
Describes `optional` and `required` methods.