Implement simulated annealing

This implements a pretty simple simulated annealing algorithm, nothing
particularly fancy.  This produces significantly better results than
the current placement code for non-mesh networks and about the same
results for mesh networks, so I think it's probably best.