Geocoding

First, it rename `lat` and `lon` fields to `latitude` and `longitude` for clarity and perfect fit for Geocoder (avoid config code)

It geocode addresses automatically using Google geocoding API (limited to 2500 req/24h)
* it geocodes location only when latitude and longitude coordinates aren't provided
* add a FakeGeocoder object for clear tests. We could use Geocoder [built-in solution](https://github.com/alexreisner/geocoder#testing-apps-that-use-geocoder) but it makes the tests obscures and harder to understand as the expected coordinates of an address, are set somewhere else, far from the test itself. (I'm trying though right now a mid-way solution combining both)

Next improvement could be avoiding geocoding if the address havn't changed. I'll take care of it if you are OK.

https://trello.com/c/wbTFtHx9
Oh, I rebased but fixed the conflict like a dick. Fixing it