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.
Is ObjectivePosition immutable? (Or is the behavior at least specified to be immutable?) If so, then maybe it might be more appropriate to change naming here from create* to get*