Arithmetic contracts

Created the arithmetic contracts. test_exp fails because it tries to call the scalar * because matrix identity function creates a scalar. 

Problems encountered with the sub and add operations that have not yet been fixed. 
Running the following:
irb
```ruby
require "matrix"
require "matrix_test"
abc = Matrix[[1,2],[3,4]]
abc + 1 # this works and calls the preconditions
abc + 1 # this does not call the preconditions
abc - 1 # this does not call the preconditions
ghi = Matrix[[1,2]]
ghi - 1 # this does not call the preconditions either
```
I know checking actual types is supposed to be "evil", but in this case, I think it really makes sense to require that the argument `is_a? Numeric`.  As far as I can tell, everything we would reasonably want to put in a matrix is numeric, and that includes integers, rationals, floats and complex numbers.