Fix duplicate communication events created for orders

As reported in #1437, when a communication event type for code
ORDER_PLACED is in the database, both the OrderPlacementMixin and the
dispatcher create a CommunicationEvent. That's no good.

This fix diverges from the suggestion in #1437, because conceptually,
communication events are created for audit purposes and the creation
belongs more into the dispatcher than the view mixin.

Fixes #147.
Refactor out a method for getting order message context

This was suggested in the code to #1437 and is an excellent idea. Allows
easy overriding and makes a long method easier to comprehend.