Bukkit/Bukkit — pull request #867 by desht (2013-04-30 09:24:46+00:00)
Title: Add MassBlockUpdate interface.  Adds BUKKIT-4114.

### The Issue:
Bukkit's existing methods for block updates (Block.setType* and Block.setData) are slow for large number of updates due to the following reasons: 1) A block update packet is sent for every change, and 2) Lighting is recalculated for every change. This means a lot of server-side CPU load and network traffic as multiple packets are sent to every nearby player.

### Justification for this PR:
This PR creates an API to specify a mass block update interface, the implementation of which will allow direct block changes to be made without any packet sending until all changes have been made. At that point, affected chunks are marked for refresh and will be sent by the server when it's ready. In addition, the API allows for control for if and when lighting recalculations are carried out.

### PR Breakdown:
Adds MassBlockUpdate interface, plus method in World interface to create a MassBlockUpdate object for that world.

The interface allows for blocks to be set with setTypeId() and setTypeIdAndData() methods, for the changes to sent to interested clients with notifyClients(), and specifies a few other methods primarily for controlling how lighting will be calculated.

### Testing Results and Materials:
See: https://github.com/desht/buster2 which includes some test data in the README for the project. Built version at https://dl.dropboxusercontent.com/u/12467600/buster2-1.0.jar

See also: http://dev.bukkit.org/server-mods/ChessCraft which has been successfully using equivalent methods (implemented via direct NMS access in the plugin) for well over a year.

### Relevant PRs:
CraftBukkit:

### JIRA Tickets:
BUKKIT-4114 - https://bukkit.atlassian.net/browse/BUKKIT-4114