Database: flatten DanbooruGalleryDatabase

make DanbooruGalleryDatabase inherit SQLiteOpenHelper directly,
instead of using a private static inner class.
SDK: refactor onStartLoading()

refactor onStartLoading() to a more reasonable syntax.
PostList: just restartLoader() in onChanged()

don't cancelLoad() then startLoading() again, just restartLoader().
the LoaderManager should take care of that for us.
[1/3] Backup: introduce backup machenism

making backups :-)
[2/3] Backup: inform database after restored

inform the database that we've restored from a previous backup.
[3/3] PostList: make sure hosts exists

when restoring backup, hosts table gets invalidated and repopulated.
the old host lookup may fail to find the correct host, we have to make
sure
the host actually exists.
Exception: enhance error dialog

report the cause of the exception, so users may get a better
understanding about it.
SiteSession: don't fetch posts in init()

call fetchPosts() in PostListFragment.onCreate() instead of
SiteSession.init().
we don't have a activity yet during SiteSession().
SiteAPI: pass tags as String[] to fetchPosts()
[1/2] Tag: record search_count
[2/2] display tag search_count in SearchView
Tag: add break in switch statements

avoid potential bugs...
[1/4] Settings: aggressive prefetch preview

Add an option to toggle aggressive prefetch of preview images
[2/4] Settings: UI for aggressive prefetch preview
[3/4] Picasso: add an instance to handle prefetch
[4/4] SiteSession: do prefetch during fetchPost()
SDK: catch NullPointerException in TileBitmapDrawable

sometimes skia fails to decode a bitmap (I don't know why), but that's
fine for us.
we just catch that and ignore it.
[1/2] PostDetail: add autoplay feature
[2/2] PostDetail: make autoplay delay an preference
PostDetail: fix autoplay prefetch next page

accidently instantiated same item as the one we're going to view.
should be the one next to the next one.