Use Array.wrap instead of Array().
Move all spatial scope constants out into their own module.

This avoids polluting models with additional constants.
Move spatial function call building logic into the SpatialFunction class.

Also, we're using more of Arel now to generate the function calls so
that they can be re-purposed in other places, such as creating arbitrary
spatial functions from outside of our scopes. This class basically
generates Arel::Nodes::NamedFunction objects and lets you play with them
accordingly.

We also introduce the ActiveRecordSpatial::SpatialColumns#spatial_function
method which lets you create arbitrary spatial function calls.