Add priorities to BungeeCord EventHandler (Based on #562 and #563)

Reasoning for this request
--------------------------------------
* This pull request attempts to add EventPriorities to the BungeeCord event system without sacrificing performance when calling events.
* It was originally based on #562 and #563, though I've looked at the problems in those pull requests' code and I believe this pull request does not have those issues.
* This allows the same flexibility in registering and ordering events that is in the Bukkit system. I've had to make workarounds in plugins when trying to get some events to go before others, and this for sure would be faster and simpler than anything that a plugin could do to work around it.

Overview of changes
------------------------------
* Add EventPriority enum with 6 priorities.
* Add EventHandlerMethod - A wrapper class containing a method and the listener object.
* Replaced EventBus's ```Map<Class<?>, Map<Object, Method[]>>``` with two maps.
 *  The first map, ```Map<EventPriority, Map<Object, Method[]>>> byListenerAndPriority``` will be used for keeping track of what listeners are registered, ordered by priority. This will be used the same way the original map was when registering/unregistering listeners.
 *  The second map, ```Map<EventPriority, EventHandlerMethod[]> byEventBaked``` contains one array of EventHandlerMethods that is ordered by priority. This map will be used when an event is called, and will be updated whenever byListenerAndPriority is updated.
* EventPriorityTest - Tests that events are called in order of priority with two separate listeners.
* UnregisterListenerTest - Tests that the EventBus correctly unregisters listeners.

Speed differences
--------------------------
* The EventBus loops through only one array gotten from byEventBaked which is already in order of priority. This shouldn't be any slower (may even be faster) than looping through one array for each listener.
* This will slow down registering listeners because the EventHandlerMethod[] in byEventBaked is recreated for every event that the plugin registers. Though I'm thinking that this won't be an issue because most plugins register all listeners at startup.