Shared IP API

Squashed work from John Perkins <john.perkins@rackspace.com> and Thomas Maddox <thomas.maddox@rackspace.com>

- An API to allow an already shared IP address to be added to or removed from another port.
- An API to allow an IP address to be "shared" instead of "configured" or "owned"
- Filters on db.api.ip_address_find should be updated to allow searching by other attributes, like the port_id. Currently it only supports "ip_shared" (changed ip_shared to address_type=shared') and "device_id"
- Any time we show ports to the caller, we must set the "enabled" flag if the port is the one the IP is currently assigned to. A change already exists in Nova anticipating this change.
- Only New IPs can be marked as "shared" at the time of their creation
- IPs cannot change from shared to not shared, or vice versa, at any time after creation until deallocated.
- Remove device_ids attribute from /ip_addresses
- Change from 'shared' boolean attribute to 'type' string attribute with the following valid values: 'shared', 'fixed', and 'floating'.
- Move address types to constants for consistency
Yeah, we actually need this one. We may want to consider filtering it out of the response on the public neutron side, but this is the flag that's actually going to indicate to the agent whether or not the IP needs to be configured for the guest. "enabled" itself is already coded into the agent