MetropolisHastings object

So the rationale for creating this is as follows. There is a function `MarkovChain.metropolisHastings` which does a very basic MarkovChain sampler. It doesn't incorporate important features like burnin (to skip a bunch of initial samples, which do not represent your posterior) or dropping a chunk of the samples (to reduce autocorrelation). 

The benchmarks also show that `ArbitraryMetropolisHastings` is 20% faster than the `MarkovChain.metropolisHastings` (provided we set burnin=0 and dropCount=0). This is probably due to the fact that:

1. If `a > 1`, I don't call Uniform(0,1).draw()
2. The monadic way of writing code creates a lot of anonymous function objects, which can hurt performance.

Please go through the code **carefully** since I don't know how to write unit tests for an MCMC algorithm. 

I've also created a variation which puts the generation work into a background thread. This can be handy to either reduce latency, or to use multiple CPUs in the event that a large amount of work needs to be done after the sample is generated. 
so, one thing that's common is to tune the proposal distributions (for acceptance probability, e.g. by increasing or decreasing sigma in a normal proposal) during burn-in. At some point it might be good to provide a hook for that