NeutronIPAM as IPAM subsystem

This implements NeutronIPAM that has been proposed in the
https://blueprints.launchpad.net/neutron/+spec/neutron-ipam.

The goal is to create NeutronIPAM as a pluggable IPAM subsytem
so that any 3rd party vendor can create her own IPAM drvier
by inherting interfaces defined in NeutronIPAM and adding
the vendor specific behaviors that utilize the vendor's
own external IPAM backends.

IPAM subsystem allows a 3rd party IPAM driver to extend the
capability of managing networks/subnets, fixed/floating IP
addresses, and DNS records.

IPAM subsystem creates "ipam" folder under neutron.
The folder contains base.py that provides interfaces for
IPAM management classes.

There are four interface classes defined in the base module.

*IPAMManager* is the main class that defines IPAM driver
behaviors and make use of business logics that are defined
in the three controller classes: IPAMController,
DHCPController, and DNSController

IPAMController enables network management capabiltiy,
DHCPController DHCP management, and DNSController
DNS record managements.

"drivers" folder is created right under the "ipam".
There exists "neutron_ipam" module as the default
neutron driver. The module has NeutronIPAM that
implements IPAMManager, NeutronDHCPController that
implements DHCPController, NeutronDNSController that
implements DNSController.

A 3rd party vendor can create her own driver by creating
a vendor folder under "drivers" and create a driver by
implementing IPAMController, DHCPController, and
DNSController and also by inheriting NeutronIPAM,
NeutronDHCPController, and NeutronDNSController classes.
Remove unused dependency 'taskflow' for neutron-ipam.
Fix permissions for config files to make them 0644 back.
Remove infoblox specific code from Neutron IPAM.
Removed unsed static method _is_ip_avaliable()
Removed used argugments in _allocate_fixed_ips(), and updated calling
code accordingly.
Renamed method ipam() to get_ipam_driver()
Fixed bug introduced in the renaming of NeutronIPAMPlugin.ipam() method.
Merge pull request #1 from bondar-pavel/bp/neutron-ipam

Restore 0644 config file permissions and remove unused dependency.
Merge pull request #2 from yuewko/bp/neutron-ipam

Remove some unused stuff and rename ipam() to get_ipam_driver()
Merge pull request #3 from roman-verchikov/bp/infoblox-plugin-neutron

OS-521 Fix router-gateway-set
Introduce entry point in setup.cfg for ipam_driver.
Merge pull request #4 from roman-verchikov/bp/infoblox-plugin-neutron

OS-532 Add docstrings to IPAM base APIs
Merge pull request #5 from bondar-pavel/ipam-driver

OS 523 Create entry point for ipam_driver in setup.cfg
Merge pull request #6 from roman-verchikov/bp/infoblox-plugin-neutron

OS-534 Fix IP allocation for Infoblox IPAM
OS-535/536 Fix flake8 issues and remove unused APIs

This fixes flake8 issues introduced by OS-532.
Includes unused method cleanup from base.py and neutron_ipam.py.

Change-Id: I8e19391a62d7848f93b43fe37a3b8a912ef97f8e
Merge pull request #7 from roman-verchikov/bp/infoblox-plugin-neutron

OS-533 Add floating IPs API to IPAM
Merge branch 'bp/neutron-ipam' into bp/infoblox-plugin-neutron

Conflicts:
	neutron/common/config.py
	neutron/db/db_base_plugin_v2.py
	neutron/db/l3_db.py
	neutron/ipam/base.py
	neutron/ipam/drivers/neutron_ipam.py
	neutron/manager.py
	neutron/tests/unit/test_db_plugin.py
Fix merge issues.
Merge pull request #8 from bondar-pavel/bp/infoblox-plugin-neutron

Fix issues that were missed during merge