Matrix function contracts, equals contract, and fixed other contracts th...

...at were failing tests.
@isupeene 
This won't do what you want, I think.  `require_operand_types` requires that the single argument to the specified function be one of the following types, or that the operator be invocable via coercion.  It's only intended for operators, since that's what coercion is used for in Ruby.  `require_argument_types` however, will take a sequence of _arrays_ of types, and require that each argument be of _one of_ the corresponding types, i.e. `require_argument_types "method", [Type1, Type2], [Type3]` says: "For method 'method', which takes 2 arguments, the first argument must be of Type1 or Type2, and the second argument must be of Type3.

Unfortunately, the preconditions for `minor` aren't specifiable by this function - `minor` requires either 2 arguments both of type `Range`, or 4 arguments all of type `Integer`.