Improving the messages for the Dictionary failure scenarios.

Fixes issue #143. Also took the opportunity to do some refactoring mentioned in issue #52. Moved some duplicate code which was in both the `GetCodePart` method of `ShouldlyMessageGenerator` base class as well as the `GenerateShouldMessage` method of the `ShouldlyMessage` class into the `TestEnvironment` class. Moved the `Actual` and `Expected` objects into the `TestEnvironment` class as well. This should let us use the `TestEnvironment` class as a context to decouple the message generators from any message class itself.