util: add OrderedDefaultDict
openflow_buffer: reworked to retain message ordering

OpenFlow bufer wasn't retaining the message order during fuzzing.
This commit reworks it's behavior and delegates the Queuing/Lookup
for receives and sends to a dedicated class, which uses an
OrderedDefaultDict indexed by (dpid, controller_id) to maintain
an ordered collection of pending_messages.

Pending_messages have been renamed message_ids for (hopefully)
improved clarity.