An implementation of a simulated annealing sampler.

A simulated annealing sampler can be used for approximate Boltzmann sampling or
heuristic optimization. This implementation approaches the equilibrium
distribution by performing updates at a sequence of increasing beta values,
beta_schedule, terminating at the target beta. Each spin is updated once in a
fixed order per point in the beta_schedule according to a Metropolis- Hastings
update. When beta is large the target distribution concentrates, at equilibrium,
over ground states of the model. Samples are guaranteed to match the equilibrium
for long 'smooth' beta schedules.
