Always treat the property classes as symbols

Otherwise you can run into String-vs-Symbol mismatches which leads to
generic Machinery::Objects being created instead of instances of the
specific classes.
Extend the description factory to support the remaining scopes
Fix models so that they make use of the specific model classes

This commit also adds tests for each model that verifies that the
specialized classes are actually used.
Add test the shows that has_property works with string and symbols

Strings or symbols can be used both for specifying the property and in
the actual data and it will always work.
Add method to the system description factory which returns the raw json
Extract Scope interface assertions into a shared_examples group