Add ScoreboardServer from mc-dev for diff visibility

Not Remapped by Srg2Source from Bukkit/CraftBukkit@8453305a306d78354799537ae55edc6421b89d72
Add a WeakCollection utility class.

This class is designed to be an invisible layer between a normal collection,
and one that silently loses entries because they are only weakly referencable.
Some operations have additional overhead to be semantically correct, but it
maintains the equals contract for all entries, as opposed to identity.

It does not support the equals or hash code method as it cannot easily have
the transitive and commutative properties.

Remapped by Srg2Source from Bukkit/CraftBukkit@8be13fa18624b7c836d81103930b91745e4ca20f
Implement Scoreboard API. Adds BUKKIT-3776

This implementation facilitates the correspondence of the Bukkit Scoreboard
API to the internal minecraft implementation.

When the first scoreboard is loaded, the scoreboard manager will be created.
It uses the newly added WeakCollection for handling plugin scoreboard
references to update the respective objectives. When a scoreboard contains no
more active references, it should be garbage collected.

An active reference can be held by a still registered objective, team, and
transitively a score for a still registered objective. An internal reference
will also be kept if a player's specific scoreboard has been set, and will
remain persistent until that player logs out.

A player's specific scoreboard becomes the scoreboard used when determining
team structure for the player's attacking damage and the player's vision.

Remapped by Srg2Source from Bukkit/CraftBukkit@d234e58e7ff5a1e1a8068d580e4a6df21a23c5ff
Fix mapping error net.minecraft.scoreboard.Scoreboard -> Scoreboard (API)

For some reason, Srg2Source 3 mapped the Scoreboard reference in
CraftPlayer to NMS instead of the Bukkit API. This cannot be correct
since setScoreboard(Scoreboard) implements the Bukkit API. Fix this
mapping error manually for now.
Handle large chests correctly for hopper events. Fixes BUKKIT-3979

In commit 7710efc5f9 we corrected the handling of large chests as the
destination for hoppers moving items but did not apply the same fix for
large chests being the source or for droppers. This commit updates these
to have the same fix.

Remapped by Srg2Source from Bukkit/CraftBukkit@e421b6a1a40699025122faa3480fd631db697e0a