Support limited option merging

This commit adds support for option merging where the deepest defined
option overrides the parent options.  Options that wish to override must
explicitly set override = true in their annotation, this is so the
current default behaviour of not permitting overrides remains the
default.

Note that only some properties of an option can be overridden:

- Title
- Description
- Hidden status
- Required status

Trying to override the option type or the arity results in an error.
Where options are overridden only the deepest defined option will have
its value populated.