implement NormalInverseWishart component model

Here's our implementation of NIW, put in the distributions framework.

Several high level notes:
- Not optimized at all (emphasis is on readability)
- Introduces (compile-time) dependency on eigen3 library
- A few functions regarding wishart sampling (with credit in the comments) were taken from matt johnson's [pyhsmm](https://github.com/mattjj/pyhsmm) project
- C++ implementation is templated on the dimension size, with size=-1 indicated variable size (this is the same convention as eigen3). The library provides template instantiation for size \in (-1, 2, 3), the most common cases. 

Hmm, I had always thought of the dumped data as satisfying

    assert example == json.loads(json.dumps(example))

and am surprised we don't test for that.
Could we use lists rather than arrays here, or would that cost some performance penalty somewhere?