Maintain hierarchy in objects, and force `with` blocks

Redid next part of #265. Resolves #275. See dd63c9bb5e4dddd4d07a469bd4076aba8b08ee70 to ignore #276. The rest will come in separate PRs.

 - `objects.Model/Network` -> `objects.Network`
 - `with` is always required
 - `builder.BuiltModel` -> `builder.Model`
 - `NengoObject` base class for all non-builtin model objects
 - Error checking in context management