Add support for dependent attributes and options.

Dependent attributes are attributes with dynamic values which depend on other attributes (or options) to derive their value. Options are like attributes except that they do not appear in the built object and are thus useful for controlling how attributes are built without appearing in the final output.