Api: Move request into separate method

This moves the actual HTTP request into a separate function so we can
eventually move response parsing into the AsyncTask so it isn't
performed on the UI thread.
Api: Parse responses in AsyncTask

This offloads the JSON parsing of API responses to the AsyncTask.
Api: Prepare for stored API responses

Moves the auth token and userid retrieval to the very beginning of the
call so they can be set externally and the internal code doesn't have to
call MainApplication.get().getUser().
Api: Store and retrieve API responses

This stores API responses in a database so they can be used in place of
live requests when the user doesn't have internet.
ApiDatabase: Use context.getApplicationContext()

Just in case the application context isn't passed in. Otherwise we will
be leaking a context since the DB will be around for the entire process
lifetime.
ApiDatabase: Don't close DB connections

Turns out there isn't a need to close the connection because
get(Writable|Readable)Database() likes to reuse the same instance but
can't if we close the connection.

I found this in the source code because I couldn't find any good
documentation on the matter, naturally.
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/database/sqlite/SQLiteOpenHelper.java#L195
Api: Replace database with file cache

Turns out reading/writing from a sqlite database is pretty darn slow.
Reading/writing to/from a file turns out to be much faster. This data
also shows up under "Cache" in the App Info settings page so users can
clear that out independently from the core app data.

Note: The DB class is still around because we will eventually use it for
storing offline guides and converting it from its existing state should
be pretty straightforward.
FileCache: Change log level to ERROR

Since it is an error even though it isn't vital for it to continue.
Merge branch 'master' into store-api-results
Rename MainApplication to App
Merge remote-tracking branch 'origin/master' into store-api-results

Conflicts:
	App/src/com/dozuki/ifixit/App.java
	App/src/com/dozuki/ifixit/model/dozuki/Site.java
	App/src/com/dozuki/ifixit/model/search/GuideSearchResult.java
	App/src/com/dozuki/ifixit/model/search/TopicSearchResult.java
	App/src/com/dozuki/ifixit/ui/FavoritesActivity.java
	App/src/com/dozuki/ifixit/ui/GuideItemView.java
	App/src/com/dozuki/ifixit/ui/guide/StepEmbedFragment.java
	App/src/com/dozuki/ifixit/ui/guide/create/ChooseBulletDialog.java
	App/src/com/dozuki/ifixit/ui/guide/create/GuideIntroWizardModel.java
	App/src/com/dozuki/ifixit/ui/guide/create/wizard/GuideTitleFragment.java
	App/src/com/dozuki/ifixit/ui/guide/view/TeardownsActivity.java
	App/src/com/dozuki/ifixit/ui/login/OpenIDActivity.java
	App/src/com/dozuki/ifixit/ui/topic_view/TopicViewFragment.java
	App/src/com/dozuki/ifixit/util/UrlImageGetter.java
	App/src/com/dozuki/ifixit/util/Utils.java
	App/src/com/dozuki/ifixit/util/api/Api.java
Api: Add underscore in between key and userid

I don't expect anybody to look at the key but I guess it's a
good idea to have it in there just for good measure.
Merge store-api-results (#185) into master

Cache API responses for offline browsing

This adds a cache for API responses so the user can browse content offline
assuming that it was previously viewed with internet available. The
current implementation stores the JSON responses as files in the cache
directory. This was preferable to using a database because it is faster
and the storage space shows up under "Cache" rather than "App Data" so it
can be cleared independently from the user's stored data.

Note: This is different than offline storage of guides because the guides
and images are not stored in a permanent location.