Added sending/sent message events and propagation

also did a major refactoring of unit tests to split sending message
tests into tests centered around "did the event fire?" and tests
centered around "does the object serialize into a string properly?"