Add support for abstract classes (no UI) and simplify device method on device classes.
Support relationships that point directly back to the same class.
Add support for specifying relationship names, rather than using the autogenerated ones, when needed.
pep8 fixes.
Fix failing unit test.
Reformat _relations to be more aesthetically pleasing (to me)
Fix an apparent typo/bug with the 'contained' argument passing.
When a component is declared in the json input, it is implicitly contained by the device.

This is fine, except when the component is a subclass of another component type- in this
case, we were ending up with the same relationship being defined both on the parent
component class and the subclasses.

This change restricts this implicit containment behavior to "top level" components, that
is ones that still inherit from DeviceComponent, not from something else.