Initial commit for distribution package. Contains Exponential, Laplace, ...

...Normal, and Uniform
There are no interfaces defined at the moment. At some point there will be, but I haven't written enough Go code to know what the correct definitions are (what methods should be in dist.Distribution?). Once more algorithms have been written, I think it'll be more clear what is needed.

As to these functions specifically, I have written a fair amount of (non-Go) code that creates distributions based on data, and such code is agnostic to the actual probability distribution used. A basic example would be the FitPrior function. With the given representation, it can be used as an interface. Yes, the actual data in the prior slices will be different for different distributions, but having slices rather than a distribution-specific prior structure allows one to construct the abstract algorithm of "Get some data, and update the distribution based on the data". As another example, one may use an optimization algorithm to find the best parameters of a distribution (for some definition of best). This occurs, for example, in Probabilistic Graphical Models, to find appropriate priors, or for distributions where there is no conjugate prior. In these examples, it is definitely up to the user to make sure their slices are correctly aligned (which is helped by the Parameters function). This is unfortunate, but I'm not sure there is a better way to do it. As Cory points out, better documentation is necessary.

If you'd like, I can rename them to something like ParametersSlice and SetParametersSlice  (MarshalSlice and UnmarshalSlice?). The names are awkward and unfriendly, but so is the function behavior. If there is a better way to handle the abstraction, I'm interested in hearing it.