Update build config yet again

Apache Commons IO is now included via Maven instead of directly via JAR
Chain Editor calls and prefer apply()
Improved non-private WeatherUtil endpoints
Added a static Cache class

This replaces the current solution which is tightly coupled with
MainActivity. The cache expiry logic is nearly identical but the
preferences database is no longer used to store JSON data. To save the
weather data we just serialize the given WeatherData object. This might
be a little faster but it's definitely easier and we no longer need to
keep track of the fields. Since it's stored in the app's cache dir
users can clear the cache without having to reset their options.

Storing weather data is async since it's no big deal if it fails but it
is a big deal if it takes too long. Fetching cached data is not async
because you care about the result and the result is likely tied to some
UI event. The caller probably already has an AsyncTask so why make
another if we don't need to?

This class is highly specific now but can be updated later to include
any type of data.
Add a memory cache for super fast access to data
Update MainActivity with WeatherUtil, Cache APIs

All the great refactoring from WeatherUtil and the Cache class is now
used by the application. There's still some work to be done to make
certain it can fail without imploding. The default weather source is
set to Yahoo but this will eventually be an option. Yahoo will most
likely replace OpenWeatherMap as the default.

This commit largely completes the initial refactoring started @ e2bf9ba