Use C++ bson driver when mongodb isn't available

* Add build_bson.sh that will fetch, unpack, and patch the sources
* Extend Makefile system to support options for IPC and DB beyond mongodb
* Change some includes to use the bson header

Signed-off-by: Mark Lentczner <mzero@google.com>
Signed-off-by: Joe Stringer <joe@wand.net.nz>
Add ZeroMQ implementation of IPC

Also abstract out IPC creation

Signed-off-by: Mark Lentczner <mzero@google.com>
Signed-off-by: Joe Stringer <joe@wand.net.nz>
Add memory based configuration backer for rfserver

Cleaned up conversions in rftable.py:
  The DB back-ends can store int and None values faithfully, so no
  need to convert to/from strings for all values.

  The %s conversion in format strings implictily calls str(), so
  no need to call explicitly

  Modifying values inside passed dictionaries is generally
  impolite, and led to very hard to diagnose problems (when those
  dictionaries were retained by other other code...).

Change-Id: I7364a10c409d0b5fe2b1bdc2d29e84f5da221170

Signed-off-by: Mark Lentczner <mzero@google.com>
Signed-off-by: Joe Stringer <joe@wand.net.nz>
rftest1: Add parameter to use zeromq

When you run rftest1 with ``-z``, it will not start or reset MongoDB.

Signed-off-by: Joe Stringer <joestringernz@gmail.com>
Add fetch scripts for ZeroMQ

Specifying the ``-z`` option to build.sh will cause it to fetch ZeroMQ.

Signed-off-by: Joe Stringer <joestringernz@gmail.com>
rftest1: Disable RFStats if using zeromq

RFStats relies on MongoDB to store state about mappings. If we're
using ZeroMQ, then this usually indicates that we are storing the state
in memory instead. In this case, the RFStats component will fail.

This patch checks if ZeroMQ is in use, and disables RFStats in this
case. This only affects pox-rfproxy, as RFStats is not currently ported
to other controllers.

Signed-off-by: Joe Stringer <joestringernz@gmail.com>