Add basic scoreboard interface.

This PR adds basic scoreboard support to the API.
The scoreboard api is able to handle nearly every scenario possible.

You can add one Objective to multiple VisibleObjectiveCollections, you can add those to multiple players, or even implement ScoreProvider or SettableScoreProvider and return the score of each entry dynamically.
I personally don't think we should be referencing packets in the api