Updated the consumer to be an Observable.
Added some reactive.linq as an experiment.
Setup the publisher to send both a TypeA and a TypeB message, so that I can test filtering by message type in the subscriber.

Added a more complex reactive example in the subscriber.
Splitting a stream into two streams.  then for each stream attaching a mailbox as a listener.
Adding a type which couples an Actor (mailbox processor) with a query on Observables, so that the event query and the event action can be defined separately from where we receive messages from Rabbit.
Updated the TypeA listener so that it is using the StreamListener type.
Updated the StreamListener so that the Query is optional: in case the listener doesn't care about filtering.

Also did some code clean up in the main function by adding a function which handles binding a stream listener to the incoming stream.
Added a new message type which will pass functions of type unit -> unit.  However, this does not work as I wanted, because the subscriber cannot deserialize the function without having  a reference to the assembly the function was defined in.
Code clean up.
Modified the Action part of the StreamListener record so that it would be the function which posts to the MailBox queue.  This way, I can easily change it to post to an external queue (e.g. rabbit,msmsq,0mq,etc)
Used partial application to improve readability.
Added a query to the TypeB listener.
Refactored the RabbitMQ boilerplate code out of the main method into it's own method.  This method returns  a Subject (the Message event stream) and a Clean Up method, which when called will close the RabbitMQ connections and channels.