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

...Normal, and Uniform
Your impression of newPriorValue is correct. The intent of the code snippet above is to fit a number of different datasets with the same prior. Currently, priorValue is not overwritten, so the for-loop I posted above does that. Alternatively, FitPrior could overwrite priorValue in place. This would also erase the previous information, but it's easy to copy a []float64. If the prior value information only exists within the distribution, then I don't see how you could "reset" the distribution to a previous value in a generic way. This argument is invalid if MarshalSlice and UnmarshalSlice are allowed as methods.

Is there any point in Parameter() that returns a distribution-specific list of parameters? All of the fields are exported and they can be accessed directly. My plan was to delete Parameter and SetParameter and instead have MarshalSlice([]float64) and UnmarshalSlice([]float64). Marshal slice always puts the parameters into the existing slice so there will be no surprise allocation.

Example Usage
```go
// Find the derivative of the log probability wrt the parameters
func LogProbAndDeriv(data []float64, parameters []float64, distribution dist.Distribution) (float64,[]float64) {
     if len(parameters) != distribution.NumParameters(){
         panic("incorrect parameter length")
     }
     distribution.UnmarshalSlice(parameters)
     var totalLogProb float64
     totalDeriv := make([]float64, len(parameters))
     tmpDeriv := make([]float64, len(parameters))
     for _, x := range data {
          totalLogProb += distribution.LogProb(x)
          distribution.DLogProbDParameters(x, tmpDeriv)
          floats.Add(totalDeriv, tmpDeriv)
     }
     return totalLogProb, totalDeriv
}
```