[C] Improvements to Player lookup - Resolves BUKKIT-4608

The Issue:
Player lookup is done very ineffeciently by iterating all online players and doing a name comparison. This results in reduced performance on larger servers.

PR Breakdown:
This PR will maintain a HashMap along side the current CopyOnWriteArrayList in the PlayerList class.
Wherever vanilla code or craftbukkit code would have iterated over the player list and performed a name comparison check, it has been replaced with a simple hashmap lookup.

PlayerList.getPlayer, PlayerList.processLogin, CraftServer.getPlayerExact, CraftOfflinePlayer.getPlayer are the areas changed.

This PR removes an unnecessary array copy of the current online players when CraftServer.getPlayer() is used. In this operation, iteration is necessary, but it was not necessary to create a copy of the array first.


JIRA Ticket:
https://bukkit.atlassian.net/browse/BUKKIT-4608