Improvements to Player lookup - Resolves BUKKIT-4608

Many sections of code does player lookups by iterating every online player
and doing name comparisons. This is very ineffecient and can reduce performance
on servers with high player count.

By using a map based approach for most player lookups, player lookup
performance should scale better with increased amount of players.

This commit also corrects a loose lookup on adding and removing ops by
using getPlayerExact instead, as adding and removing ops is not a loose
match operation.
Allow force spawns

Pass spawn reason force to not allow plugins to block