Gaussian Process Regression with Heteroscedastic or Non-Gaussian Residuals