[WIP] Implement support for networking-as-a-service (aka OpenStack Neutron)

This is a WIP PR. Feel free to review but do not merge it just yet. When it is ready for merge all "WIP" mentions will be removed from it.
I never know what to put for these class docblocks; it seems we have two options:

1. Use them to document the behaviour/identity of the class. `Class that represents a port.` seems superfluous though...
2. Use them to document the API resource which this class represents

What do you think?