Issue title: Fix / tidy / consolidate MCMC code
 Issue body: I've been having a look at the MCMC code in Breeze, and it seems like it could do with some tidying up. There are currently two separate implementations, which is confusing, neither of them are well-documented, and currently only one of them actually works correctly.

Within stats.distributions there is a MarkovChain object containing some Kernel functionality, and metropolisHastings code. The metropolisHastings kernel contains bugs which lead to incorrect output. I guess this means that no one has actually ever used this code. This is obviously a problem, requiring deleting, deprecating or fixing (it shouldn't be that difficult to fix).

Completely separate to this, there is breeze.stats.mcmc which also contains functions for carrying out Metropolis Hastings sampling. In some ways I prefer the MarkovChain API, but to be fair the code in stats.mcmc does appear to give correct output for the one example that I've tried...

Both implementations could be improved. eg. both work with raw acceptance ratios, which makes them very vulnerable to numerical underflow. I'd be happy to help tidy things up, but I wondered if there was any kind of plan for how to consolidate things.

 Comments: 
 Comment 0: I wrote the MarkovChain code in like 2009, so it's really old and I knew much less then. The newer stuff is from @stucchio I think. 

I'm happy to consider pretty much anything. I'm especially interested in more or less declarative/functional APIs that let you compose big models easily (e.g. should handle a gibbs sampler for LDA) 

You might look at Factorie or Wolfe for inspiration.
{'source': 'GithubIssues', 'repo_name_with_owner': 'scalanlp/breeze', 'issue_id': 142469828, 'repo_stars': 3378.0}