Add alternate name and virtual fields to Location.

The `virtual` field is a boolean meant to specify whether or not the
location has a physical address. This will allow “virtual” locations to
be saved without requiring them to have an address. This validation
change will be implemented in a separate commit.

In addition to adding those two new fields, I cleaned up the Location
model, and fixed two issues with geocoding:

- When an address was removed from a location, the location’s
coordinates weren’t being reset. The spec that was testing this was not
written properly. This has now been moved to an `after_destroy`
callback in the Address model, so that this only gets called when
necessary, as opposed to every time the Location is validated.

- When an address was updated via the API, the location’s coordinates
were not being updated because the location itself wasn’t being saved
(touching does not trigger `after_validation`).