Early matrix/vector support

 a reimplementation of the numpy matrix class, with:
 - slightly different printing
 - convenient element-wise functions
 - overloaded <= for constraint generation

Resolves #8.
There's outer product - like this?

```
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array([0, 1, 2])
>>> np.outer(a, b)
array([[0, 1, 2],
       [0, 2, 4],
       [0, 3, 6],
       [0, 4, 8]])
```