Added contracts for all matrix properties (those methods categorized under 'Properties of a matrix' in the Ruby documentation).
Changed the contract recursion guard to be on a per-class basis rather than a per-instance basis, to avoid calling contracts on matrices that are created to validate contracts of another matrix.  I'm not sure that this would ever cause infinite recursion in a sensible program, as it's probably not wise to have cyclic dependencies between contract methods (i.e., defining the contracts for 'regular?' and 'singular?' in terms of each other), but it's probably best to avoid the situation entirely.  Also changed some 'and's to '&&'s to be more idiomatic and to get rid of a syntax error that I didn't entirely understand.
Fixed a few errors in the property contracts.
Copied some test cases from the latest version of ruby to improve coverage.  There are still a few functions that are left untested.
Merge pull request #7 from isupeene/property_contracts

Property contracts