Property contracts

@bsoetaer 
Implemented a bunch of contracts, and made some minor changes to the Contract module to avoid recursion when creating new matrices within a matrix contract method.

I verified that the contracts are being called through manual testing - changing one of the contracts (i.e. change '==' to '!=' in `regular_postcondition?` causes the corresponding tests to fail.

Note that 9 of the tests are currently failing, since I changed them to expect `MiniTest::Assertion` (what the `assert` methods throw on failure) rather than what was previously being thrown.  When we implement contracts for those methods, the tests will pass.  This is a test of not only our implementation, but our contracts as well.
Darn it - I was hoping running the test cases would catch stupid errors like that, but it looks like the `normal?` function isn't under test.  I'm going to check a newer version of the matrix tests to see if they have better coverage.