Added loads of unit tests, code's been tidied up, added serialization methods

completed the logic to manage a message bus between processes based upon
a strong type reference