start of gaussian process, implemented gradients but cannot check them yet, as checkgrad func is kind of odd