Gaussian process work

I have fixed the Gaussian Process submodule so that Gaussian Processes can be trained on data which is vector like in y. Now when training a GP each point in both X and Y can be of arbitrary dimension. Previously, the values of Y were required to be scalars, which is a requirement which is not necessary for GPs.

The changes are fully backwards compatible, and the old tests work fine. I have not written new tests to test the new functionality, but I can if it is necessary.