Ensure that throw tests check the expected errors, to ensure that it is testing the correct failure

I've gone through our Throw() checks and ensured that we are testing for the text in all cases. This ensures we're actually testing for the expected failure, not necessarily a side-effect of one.

In some cases our tests were giving different errors because 'this' wasn't right in the object, and in a couple of places, I found some actual code issues.