Implement reconciling flows when connection to switch is established

When the agent starts up, or after it reconnects to the switch, one
cannot guarantee that the flows present on the switch are in line
with those expected by the state of MODB objects. The purpose of this
change is to ensure that the flows are sync-ed up. The flow-manager
has another modes of operation now, called "syncing", whereby only
the cached table state is updated in response to MODB notifications;
the normal mode of execution is to update both the cached state and
flows on the switch. When connection is established to the switch,
flow-manager transitions to syncing and also starts reading the current
flows and groups present on the switch. Once all flows are read,
it compares them with the cached state and executes modifications
on the switch to eliminate the differences. Once these are complete,
normal execution mode resumes.
To simply the interaction between different callbacks, I've introduced
a work-queue. Event notifications from MODB and connection events
just enqueue a work-item for execution later.
Flows in the learning table that are learnt reactively are not synced
by this process because they have an idle timeout.

Change-Id: I69376c30c711a523c55491708d71896eddfa12d6
Signed-off-by: Amit Bose <bose@noironetworks.com>