Navigation: Simplify item creation

Using the enums directly is less error prone and makes comparison
easier.
Navigation alerts: Use a single function

One function can be used to determine whether or not to warn the user
before navigating away and retrieving the AlertDialog.
Refactor Navigation enum

Navigation is renamed to NavigationItem because it represents a single
item in the navigation drawer. Now it contains all the information
needed to perform navigation. It can either have an Activity class to
launch with intent flags, a URL to view, or an Action to run arbitrary
code.
Combine Item and Category with NavigationItem

Now all of the data is stored in Navigation item and the list is
constructed by iterating over the enums and sending it off to the
adapter. The massive block of code that adds Items and Categories is now
gone!
Merge simplify-navigation-selection (#165) into master

Simplify navigation drawer item creation

This pull addresses a few problems with how we previoiusly had navigation
set up:

1. There was a large block of code to add items and another one to respond
   to click events.
1. The items were referenced by String so there wasn't any type safety
   ensuring that the menu items named existed in the enum.
1. Many Objects were allocated every time the menu drawer is rebuilt.
   This happens frequently and results in garbage collection working
   overtime to clean everything up.
1. Each menu item handled the click event manually. For most menu items,
   an Activity needed to be launched. This resulted in lots of duplicated
   boilerplate code.