Add L3 Extension for Distributed Routers

This patch introduces the model and extension framework for
implementing distributed virtual routing on top of Open vSwitch.

A new admin-only 'distributed' (as opposed to a 'centralized' or
legacy-mode) attribute is added to the API router resource. It is
possible to convert an existing (centralized) router to a distributed
one; the opposite conversion, even though allowed by the API, may not
be honored by the underlying plugin implementation and an appropriate
error will be reported.

When creating a router (regardless of the user role), Neutron will
rely on a system wide configuration, whose default currently allows to
create 'centralized' routers.

Tests are added for basic unit coverage; when the first building
blocks for neutron-testing-refactor are complete, functional testing
will be added.  This is because we should be moving away from how
extension tests have been done up until now.

Partially-implements: blueprint neutron-ovs-dvr

DocImpact

Change-Id: I7227fbe2718eba6665a5afb5dcaaaa77b341091f
Authored-by:    Swaminathan Vasudevan <swaminathan.vasudevan@hp.com>
Co-Authored-By: Armando Migliaccio <armamig@gmail.com>
Modify L3 Agent for Distributed Routers

This patch is an enhancement to the existing L3
Agent. This allows the L3 Agent to run in
Distributed mode.  This patch is a part of
Neutron OVS Distributed Router Blueprint
neutron-ovs-dvr.

Supports distributed routers by enhancing the router
object to function across multiple nodes.

Utilized two new types of namespaces:
-FIP to handle multiple VM fips and routers per node
-SNAT to handle centralized SNAT per router

New configuration params are used to notify l3-scheduler
what each agent supports.

Rules and tables are enhanced and added to support
routing across distributed routers without going to
a centralized router.

Co-Authored-By: Rajeev Grover <rajeev.grover@hp.com>
DocImpact: new config params, functional, and deployment changes
Partially-Implements: blueprint neutron-ovs-dvr
Change-Id: Icead821bb74372b15aac2e5cefe8ad7f08c037ab
Add L3 Scheduler Changes for Distributed Routers

This patch implements the L3 Scheduler changes for the
Distributed Virtual Routers.

Partially-implements: blueprint neutron-ovs-dvr
Co-Authored-By: Carl Baldwin <carl.baldwin@hp.com>
Change-Id: I407c3d639ebdf885b1418bceac7cfc251e7eba1f
Merge DVR patches together