Push location to core

Location is a handy abstraction that makes sense having in core rather than just in the user API. This PR moves it down to core and changes everything over.

All tests are updated and complete successfully.