Add an atop-based ravel
Add an atop-based ravel

In Dask 0.13.0, `ravel` is pretty restrictive in terms of how chunks are
laid out. Newer versions of Dask (0.14.1+) do not have this problem.
However we have been stuck with this old version of Dask to maintain
compatibility with conda-forge's Python 3.4 stack. Though we may be able
to change this in the future by using the new noarch Python packages
and/or dropping Python 3.4 support.

To workaround these restrictions with `ravel` in Dask 0.13.0, we
implement a Dask Array `ravel` function that uses Dask Array's `atop`
and NumPy's `atop`. The result is an implementation of `ravel` that
bypasses the chunking concerns raised by Dask's old `ravel`
implementation.

Further it appears that when testing our implementation of `ravel` on
the newest Dask (0.15.3) our implementation appears to go notably
faster. While we have not benchmarked this thoroughly by any means it
appears to at least go 2 times faster on large data and there is some
indication that it goes faster still on smaller data. So not only is
this useful for supporting old versions of Dask, it gives a performance
boost over the native Dask solution in newer versions.

jakirkham/dask-distance