Added complex arithmetic contracts.

@bsoetaer 
Checked and pretty sure zip can't be called like this. need to do 
```ruby
a = Vector[0,1]
b = Vector[2,3]
a.zip(b)
```
Also what is the second element coming out of ``` all? ``` here? Element in [1,1] in instance needs to be compared to element in [1,1] in result right?