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. 
this is cute. is it actually faster to do things this way in general (let's assume several but not tons of cores)? This is presumably going to be a lot of contended locks compared to just generating things in thread, no?