Fix thread safety issues
Fix thread safety issues

The important fix here is always deleting from @allocated in the
ensure clause in hold.  Not doing so causing the thread safety
issues.

Numerous other beneficial changes while here:

* Keep references to inherited sockets, so they don't get garbage
  collected. You still need to make sure to use exit! instead of
  exit in the child processes.

* Make @listening_on a hash, and store a unique value for the
  channel.  This fixes issues if you subscribe, unsubscribe, and
  resubscribe quickly.

* Add exec_prepared method which automatically calls clear on the
  PG::Result objects returned by PG::Connection#exec_prepared. This
  cleans them up as soon as they aren't needed, as opposed to
  waiting for GC.

* Use separate connection for LISTEN, instead of a connection from
  the pool.  This can fix issues if trying to use the same bus
  inside the yielded messages.

* Add better fork detection to hold and subscribe.

* Remove queue in memory stuff, since it appears to be tied to
  Redis specific code.

* Don't use a separate MessageBus::Postgres::Client connection for
  the subscribe, now that MessageBus::Postgres::Client uses a new
  PG::Connection internally.

SamSaffron/message_bus,MadBomber/message_bus,cannikin/message_bus,nathanstitt/message_bus,MadBomber/message_bus,MadBomber/message_bus,cannikin/message_bus,nathanstitt/message_bus,cannikin/message_bus,nathanstitt/message_bus,SamSaffron/message_bus