RFC: imedge/gradient operator updates

I'm doing edge detection for a project, and the current `imedge` implementation seemed to have a few small issues:

* Magnitude and phase were always returned as matrices, even with `Image` inputs.
* The gradient calculation returned the negative gradient.
* `imedge` always calculated returned the magnitude and phase, even if they weren't needed.

This PR addresses the above points, and adds a few things:

* Refactor `imedge` into `imgradients`, ~~`imgradient`,~~ `magnitude`, and `phase`; (`imedge` still exists, and `magnitude_phase` exists as convenience function to calculating magnitude and phase at once)
* Add version of `sqrt`, `tan2`, unary `(-)`, **and `hypot`** for `Images`, so that magnitude and phase can be returned as `Image` types
* **Calculates `phase` using a loop so to avoid temporaries**
* Added additional gradient operators (`"ando3"`, `"ando4"`, `"ando5"`) from Ando Shigeru
  (Consistent Gradient Operators, PAMI Vol 22 No 3, March 2000)
* Set `ando3` as default gradient method for `magnitude`, `phase`, `imgradients`, and `imedge`
* Changed Sobel, Prewitt operators to give gradient instead of negative gradient;  ~~also changed the order of arguments to return horizontal filter, vertical filter~~
* Added separable approximations of `ando4` and `ando5` filters (`"ando4_sep"` and `"ando5_sep"`)
* Generalized most functions to >2D (incomplete)

----------------------

Notes:
* The `ando` filters are nice in that they give a close approximation to the true (sampled) gradient than Sobel or Prewitt, so it made sense to use one of them as the default method for the `imgradient*` methods.
* The changes to the `sobel` and `prewitt` functions are technically breaking changes.  ~~I thought it made more sense to be consistent with the ordering in the `imgradient*` functions (and `imread`), but I can change the return value order back if you'd like (and change the new filters to match).~~
* I copied the filter values for the `ando*` filters directly from the paper.  As such, they have limited precision, and `ando4` and `ando5` are not separable, which causes `imfilter` to call `imfilter_inseparable`.  ~~Unfortunately, `imfilter_inseparable` does not respect `Image` file inputs, so the return values are always `Arrays` (filed as #133).~~  Because of this, I created the separable versions of `ando4` and `ando5`.  (The original filters are **almost** separable, so it might be that calculating precise filter values would help, but that's unclear at this time.)
* ~~Because the y-axis increases going down, the call to `tan2` requires flipping the sign of `grad_y` on the  (which creates a copy of `grad_y` and is inefficient).~~

To do:
 - [x] Add tests
 - [x] Update docs
 - [x] Fix gradient calculation so it does not call `-grad_y`

Feedback appreciated!