add ArrayUtils
fix array index out of bounds
re-arrange reduceStart parameters
add ArrayUtils.reduce method
add boolean methods to ArrayUtils
change permissions Player parameters to CommandSender
add Tab Complete support to commands

add TabCompleteDispatcher to send tab complete calls to the appropriate AbstractCommandHandler

AbstractCommandHandler automatically gets the list of sub commands available.

AbstractCommand implementers have the option to override the onTabComplete method to handle command arguments.