Updated the consumer application so that it uses a mailbox processor.

What happens:
when the consumer reads a message off the queue, it converts it into a string, and then posts it to a Mailbox Processor which prints the message.
Added list of mailbox processors.  Just for fun!
Updated the type I use for messages.  Before, I sent a simple string message.  I have changed this to use a Discriminated Union for the message contract.

What happens now, is that the DU is serialized into a binary format, which is then written to the queue.  On the consumer side, after the message is read from the queue it is deserialized into the Discriminated Union.
Added a library with message contracts
Added a function to the Message type which will serialize it to XML.
added a console project which will allow me to easily test serialization and deserialization.
Added a performance counter reader and then updated the publisher to send messages with the percent CPU usage.
Updated the PerformanceCounter code so that instead of returning an instance of a Counter class, it returns a function which when called will return the NextValue of the counter.

Also, updated the BinaryEncoder to be a generic function rather than a member function of the Message type, because it can be completely generic.