Edge thinning updates

* Discretize image gradients on the fly, to avoid temporary allocation
  of a discretized gradient image, per Tim Holy's suggestion
* Add versions of thin_edges_nonmaxsup!, thin_edges_nonmaxsup_subpix!
  which allow results to be placed in preallocated arrays