gis: Refactor of the `GeoQuerySet`; new features include:
(1) Creation of internal API that eases generation of `GeoQuerySet` methods.
(2) `GeoQuerySet.distance` now returns `Distance` objects instead of floats.
(3) Added the new `GeoQuerySet` methods: `area`, `centroid`, `difference`, `envelope`, `intersection`, `length`, `make_line`, `mem_size`, `num_geom`, `num_points`, `perimeter`, `point_on_surface`, `scale`, `svg`, `sym_difference`, `translate`, `union`.
(4) The `model_att` keyword may be used to customize the attribute that `GeoQuerySet` methods attach output to.
(5) Geographic distance lookups and `GeoQuerySet.distance` calls now use `ST_distance_sphere` by default (performance benefits far outweigh small loss in accuracy); `ST_distance_spheroid` may still be used by specifying an option.
(6) `GeoQuerySet` methods may now operate accross ForeignKey relations specified via the `field_name` keyword (but this does not work on Oracle).
(7) `Area` now has the same units of measure as `Distance`.
* The aggregate union method is now known as `unionagg`.
* The `field_name` keyword used for `GeoQuerySet` methods may no longer be specified via positional arguments.
* `Distance` objects returned instead of floats from `GeoQuerySet.distance`.
* `ST_Distance_sphere` used by default for geographic distance calculations.