Async

The operation deferral has now been hand-tested.
Quoting Ian Denhardt (2014-10-17 19:50:14)
> Quoting henn (2014-10-17 17:29:21)
> >    Could we switch this loop to handling one action at a time?
> > 
> >    Right now, if there is an error handling one port, the functionality of
> >    every other port will be affected.
> 
> Yeah, that occurred to me. The downside to doing them one at a time is,
> you end up logging in and out of the switch for each one. Avoiding this
> would involve reorganizing how the drivers are layed out.

I thought of a neat (though not necessarily sensible, let's talk about
it) way to do this that isn't very intrusive.

Rather than have `apply_networking` take a `dict`, it could take an
iterator of (key, value) pairs (tuples). The `dict` class has a method
`iteritems` that does exactly this, and we could use it here to write a
generator that checks the actions off as they're completed.

This would be a fairly minor code change, but there's a really important
thing to consider: We'd be modifying the database inside of the
iterator. Right now, none of the drivers care, and it's possible to
argue that they never will - network ids are opaque strings, so it
stands to reason that any information the driver needs should be able to
fit in there. Nonetheless, this would disallow any use of the database
from within apply_networking, since it would interfere with potential
transactions happening in the iterator.

Thoughts?