Add Event types

Close #39. Close #38. Close #36. Close #35. Close #30. Add event types. Update events to work with event types. Add tests for event types. Update event tests.
One solution would be to use jQuery to ajax out the old one and then use jQuery again to render and inject the new one in. This is really simple if your able to pass the values needed to render the page back to the jQuery as a json object (likely from the controller)