Maintain hierarchy in api, enforce with (Rebased)

Cherry-picked dd63c9bb5e4dddd4d07a469bd4076aba8b08ee70.
 - Model is recursively structured.
 - `with` is required.
 - Fixed a test which occassionally failed due to floating point
   comparisons
 - `NengoObject` base class for simplifying `__hash__`, `__str__`, etc...
 - A bit of general cleanup with string quotes and specifiers