Fix Location "Remove" button

To remove postmeta fields via XML-RPC, we need to send a custom_fields
entry with the meta ids. When a location was removed, we would just not
send the custom_fields entry, which doesn't work.

This change sets the id for the location meta fields if they exist. If
the location is being updated, we set the value. If the location is
being removed, we don't include the value. If the location is newly
being added, we set the key and value.
New helper class for PostLocation

Instead of encapsulating the lat/lng behavior in the Post model, we can
move it to its own class. Includes matching tests to catch invalid location values.
Utilize new PostLocation class for Posts

Replace all instances where latitude and longitude were being
manipulated directly and replace with the appropriate implementation of
the PostLocation class.
Use supportsLocation method instead of isPage

Makes it more flexible to modify what things support Location in the
future.
Set PostLocation class as Serializable

Because Post is serializable, all its properties must be too. Prevents
fatals when attempting to serialize a Post object.
Use Post Location when viewing map

Previously, we were using the current location, which may or may not
accurately represent the post location.
Catch null loc values when getting post from DB

We were just grabbing the lat/lng values set in the db and setting as
is. For posts without a location, this meant that we would set their
lat/lng to 0,0 which is a valid location.

We now check for null db column entries before setting the location
value for the post to prevent that.
Call getLocation only for posts without location

Post.isNew has a bug currently, which causes it to return
true for almost all posts (see #1463). Instead of prompting the
auto-location detection for isNew posts, so it only for posts that don't
have a location so we don't end up unnecessarily overriding things.

We will override this behavior soon to make the location setting
on-demand.
Update out-of-date comment
Post.hasChanges should check is location is set

Prevents null pointers when checking for Pages, where the location is
never set.
Store a PostLocation object in PostSettingsFrag

It's more relevant to our current usage and we can more easily control
and check its validity. This prevents odd errors when the "View Map"
button is pressed immediately after updating the location.
Move Location Settings to ViewStub

Because the Location section is not always applicable, it makes more
sense to move it to a ViewStub and only inflate in contexts where it is
going to be used. This is more performant and simplfies the layout
quite a bit.
Geotagging UI Refresh

Make the geotagging for a post on-demand instead of automatically
adding location to any new post or post without a location.

When a post doesn't have a location, users have to explicitly choose to
add a location. They can use their current location, if available, or
search for a location.

The experience now more closely mirrors the updated "add location"
experience on WordPress.com.

see #870
Refactor: move hasLocationProvider to a method
Implement Editor Action for Location search input

When the search key on the soft keyboard is hit, we should start the
search. Also show and hide the keyboard when edit is requested and
search is triggered.
Remove "View Map" and make the Location clickable

Simplifies things a bit by removing clutter from the Post Settings
screen.
Add icon to "Add Location" button

Add a cue that the button is for geotagging

h/t joen for the icon
rm unused location strings

location_toast + view_map were removed

h/t maxme
Update location search button based on context

If we're searching for the current location, "Locate" makes more sense
than "search".

h/t maxme
showSoftInput helper needs to requestFocus first

EditText needs to have focus for showSoftInput to fire correctly.