* multiplied RBF kernels can now be used with gradient observations
* standard periodic kernels can now be used with gradient observations
* predictive gradients (derivatives of posterior means and variances) can now be calculated when using gradient observations
* simplified and commented RBF & StdP kernel derivatives
* updated kernel slicing and commented prod kernel derivatives
* removed caching from stdp kern, as it breaks optimization for some reason
* fixed hyperparameter optimization for prod kernel
* improved code readability
* added unit tests for gradient observing MultioutputGP models
* added predictions check to unit tests
* bugfix for multioutput_kern
* improved testing coverage
* reduced size of some tests; led to an issue in an unrelated test
* updated testing
* added gradient MultioutputGP prod kernel example
* added keywords and plotting to example
* Update setup.py
remove special handling of scipy dependencies for old python versions
* Update __init__.py
replace numpy type by native type
* replace np.bool by bool
The number of inducing points in the latent space defaults to 10, which creates an error if there are fewer than 10 conditions (i.e. output dimension is less than 10). Currently this error shows up somewhat opaquely. This fix makes the error explicit, which may save time for future developers.
The current error shown is:
```
~/code/anaconda/lib/python3.6/site-packages/GPy/inference/latent_function_inference/vardtc_svi_multiout_miss.py in inference_d(self, d, beta, Y, indexD, grad_dict, mid_res, uncertain_inputs_r, uncertain_inputs_c, Mr, Mc)
82 LcInvPsi1_cT = dtrtrs(Lc, psi1_c.T)[0]
83 LrInvPsi1_rT = dtrtrs(Lr, psi1_r.T)[0]
---> 84
85 tr_LrInvPsi2_rLrInvT_LrInvSrLrInvT = (LrInvPsi2_rLrInvT*LrInvSrLrInvT).sum()
86 tr_LcInvPsi2_cLcInvT_LcInvScLcInvT = (LcInvPsi2_cLcInvT*LcInvScLcInvT).sum()
ValueError: operands could not be broadcast together with shapes (5,5) (6,6)
```
If you run mpiexec -n 2 on any code to try to use MPI multiprocessing for SparseGPRegression, it crashes (see #618) because the rank>1 processes do not have ret defined.