Use attr_accessor and ActiveModel validation
Move common mixin functionality into Internals module.

Use generate_spec in Visualization to convert entire hash into JSON
spec.