Refactoring the difference highlighting 

Refactored the difference highlighting system to be more centered around the 'TestEnvironment' which is our context. This makes it similar to the pattern that is used for the message generators and allows us to add new difference highlighters easily. This is an interim step towards adding issue #41 . With the 'TestEnvironment' being passed in rather than just the 'Actual' and 'Expected' values, it should be possible to tell whether or not to ignore case sensitivity for example. Basically, having the whole `TestEnvironment` class should allow us to write richer highlighters .

As an aside @JakeGinnivan , we should consider renaming the `TestEnvironment` class to be `AssertionContext`, since that is what it really does - package up all the nitty gritty details of the shouldly assertion.