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. 

OK, yes, we discussed ndarrays as values. @cap is this a problem anywhere in our stack, or can we assume csv+protobuf serialization are enough?