WIP: initial reprojection routine

To-do:

* [x] fix 1-pixel offset in output
* [x] make code robust to direction of longitudes/latitude (clockwise, anticlockwise), need to test with various CDELT signs
* [ ] re-write in Cython/optimize
* [x] add tests
* [ ] add flux mode in addition to surface brightness mode
* [x] properly support different coordinate systems
* [ ] for larger images, may not be efficient to convert all the world and pixel coordinates in one go (thought whenever possible, it should be done). One needs 1Gb to store the position of all the corners for a 33Mpix image, which would a little more than an 4096x4096 image. In many cases, it is likely that the output image will be quite large and may go beyond those limits. We could switch to a model like Montage where we proceed row by row or chunk by chunk (row by row may not be the most efficient). If both the input and the output are large, we won't be able to avoid being inefficient and recomputing the same coordinates multiple times if they can't be stored.
* [ ] for large output images, use memory mapping

But to first order, it does appear to be doing the right thing (apart from the 1-pixel offset)


By the way, the reason for removing this for now is because I use the same function names in both sub-packages, so there is a namespace clash. If we want to import them both into the top-level we have to figure out what the naming scheme of sub-package functions will be. We could have e.g. ``reproject_interpolation_2d``, ``reproject_drizzle_2d``, and ``reproject_whatever_2d`` where ``whatever`` is a better name than ``spherical_intersection`` (still trying to think of a better name!).