Offline Guides!

This adds functionality to store guides and view them offline. See #182.

TODO
-------

 - [x] ~~Translate new strings.~~
 - [x] Make notification icons for white labelled apps
 - [x] ~~Wi-Fi only sync setting?~~
 - [x] Polish UI (especially for tablets)
    * Sync bar text spacing/sizing
    * Offline guide list item spacing/sizing
    * Favorites list empty state
 - [x] Tie offline guides to user's favorites?
 - [x] ~~Allow arbitrary offline guides outside of favorites?~~
 - [x] ~~Have separate offline guides and favorites views?~~ c5437b4022503163a90c649c790e2b558059ebd8
 - [x] Decide on sync frequency and events that trigger it (opening app, offline guides?) a7c9c83d6429bc437a5d327d6a4d6a179554fbab
 - [x] Disable sync button if internet is unavailable. a7c9c83d6429bc437a5d327d6a4d6a179554fbab
 - [x] Update notification text 8ec688fe884339c14155da8e8fd076bd6b28e900
 - [x] Update notification icon 024c8937fbce5206313727ce79cc5764a21bdc2b
 - [x] Fix notification display/hide conditions
 - [x] The notification isn't opening the OfflineGuides activity anymore.
 - [x] ~~Update Offline Guides menu drawer icon~~ (fixed by replacing FavoritesActivity with OfflineGuidesActivity)
 - [x] Make a nicer interface for displaying offline Images (conditionally doing `new File(getOfflinePath(url))` is ugly) b1e71e8c16187c5c037f9270d29bc4b3464ec8e6
 - [x] Improve guide progress UI updates. Right now `ApiDatabase` sends out a broadcast indicating that some data has changed and `OfflineGuidesActivity` refetches everything from the DB and reparses all of the JSON. This should be more efficient because it should really only update the progress and not refetch all of the data. It should also be able to send updates to other views that display guides e.g. guides in search, topics, favorites, teardowns, etc. 0ed570d553ad2113ea457c1c592db89cdde517ac
 - [x] Make sure the UI removes offline guides that have been deleted. ee46abefa1ce284141a81af911bda911d4f077a3
 - [x] Make offline guides list status display look much better and display more (useful) information.
 - [x] Offline guides list last sync time should update if it's a relative time e.g. it shouldn't stay "3 minutes ago" for hours. Changing it to a date might work but isn't as useful because you'd always have to convert to the current time. 771519dc927a13d1d74e5b0b5474343a46471054
 - [x] Update offline guides list "Refresh" button text. b170d20d459ad6e9be6676dddea56ccb03451df8
 - [x] Change the color of the pinned icon based on the current sync status. 28cab146c8c537b263f778e873cbd1ff0f582f72
 - [x] Removing favorited guide doesn't result in a UI update. 77fcbb67bf0d92ed609485d1c2f18b3bd97b96a8
 - [x] Disable guide view menu items for offline guides because they won't work. f8f15b9f3b13ef367a716d873be5489dd3473cf9
 - [x] Refresh offline guides when restarting activity. 1df70b53dbb92b71f6610c64f9d2defcad2057a0
 - [x] ~~Delete media that is no longer referenced (this will be tricky if there are multiple users signing into a site on a single device. We don't want to delete images that might be used again if the user is logged in.)~~ Started on it but turned out to be too troublesome: 0df79be3dcb960d613b9096edd1ff060ce4fa0f5
 - [x] Make sure that the app works without internet (it might be hard/impossible to view the offline guides list without internet so lets triple check that it's always possible because it would be really bad if it didn't work)
 - [x] ~~`<feature creep>`Allow users to specify guide download priority.`</feature creep>`~~
 - [x] Logging in causes some hanging sync stuff...
 - [x] ~~Display sync errors in the offline guides list.~~
 - [x] Store `GuideInfo` JSON along with the full guide and use the `GuideInfo` JSON to display the list of offline guides. This _should_ improve performance a lot. 96e0ba6d651023dcfc9bb8a8d1cc4e58bcbcdd7b
 - [x] Opening OfflineGuidesActivity from the notification doesn't always work. 1430e6b1179611f83bb460bab3e04cc4cb1b4f34
 - [x] Always display total progress in notification but only leave the success message if there was new content? c05d796ff7ab5f371327e4efd32650ce52095b70
 - [x] Make sure the performance of the entire system is acceptable with many favorited guides.
 - [x] Add more sync settings. There is a system setting for syncing automatically that the user can get to in Settings but that probably won't be found. Perhaps we should have a setting with the offline guides list to disable automatic sync so the user can do it manually instead? 016c357ff7327958807b094f1e1c151ee1980d01
 - [x] Add ability to unfavorite a guide from offline guide list. (Or maybe not because you can do it once you open the guide.) c72dd586cc700f0c314bff24faf48a5df8132a1e
 - [x] Don't sync when opening OfflineGuidesActivity if "Sync automatically" is disabled. 36999d0d6cafff52f8c1ce7534f4ee27aa7cab6e
 - [x] Google Analytics tracking? c958f2c657c081189518fbd7f9c61085a0ece460
    * Sync all button event
    * Drawer Item event
    * Favorite menu item event
    * Offline guides list page view
    * Cancel sync all button event
    * View guide from offline
    * Extra event on guide view for offline viewing
    * Sync automatically menu item