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
What does abstracting these strings buy us? I'd almost argue that it'd be clearer to have the raw values in the code. I'm probably missing something.