Added non-maximal suppression edge thinning function

* new functions: thin_edge, thin_edge_subpix, which currently
  call thin_edge_nonmaxsup, thin_edge_nonmaxsup_subpix.  Calling
  the latter functions directly has a few more options.  The
  generic thin_edge functions could be extended with other edge thinning
  algorithms in the future.
* Base on, but substantially modified from Peter Kovesi's nonmaxsup
  function for matlab
* thin_edge_nonmaxsup takes edge and gradient images as input,
  and tests whether each non-zero edge location is a local
  maximum by looking up and down the gradient at that location.
  The output image contains the values at all local maxima, and
  zeros elsewhere.
* For each local maximum, thin_edge_nonmaxsup_subpix fits a
  quadratic to the local geometry along the gradient, and returns
  an image containing the subpixel location of the actual maximum
  as an image of Base.Graphics.Point objects.  For Points, pt.x and
  pt.y always refer to x and y axes, respectively, regardless of
  image orientation.
* thin_edge_maxnonsup_subpix also modifies the first output image to
  return the estimated maximal value at the subpixel, if that value
  fits into the type of the output image.
* Modified the original algorithm so that it checks the minimal adjacent
  pixel value in the direction of the gradient; if this pixel value
  is greater than the value at (x,y), (x,y) is not a local maximum
* Changed angle discretization from (0,pi) to (0,2pi).  By testing
  in the direction of the actual gradient first, we reduce the number
  of interpolations in the other direction by ~1/4 in an average image
* Defines `zero` for Base.Graphics.Point if necessary
* Defines tests for vertical, horizontal, and diagonal edges
* Basic docs for all 4 thin_edges* functions