ByteArrayBuilder no longer prefixes the internal ByteBuffer with a
length. This has been moved to NetworkPacket.
Added basic Competition Events, such as competitor
registering/deregistering, new languages added, new problems, and so on.
Added JudgeManager events; furthermore, notifying of successful judging
is now done via the SUBMISSION_JUDGED judging event rather than a
constant polling - with this, a Competition thread is no longer
neccessary.
Added a pointer in ProblemSet to its active Competition - for the
explicit reason of calling the Competition PROBLEM_ADDED,
PROBLEM_REMOVED, and PROBLEM_CHANGED events.
Added a pointer to the ProblemSet that created this problem, in order to
call PROBLEM_CHANGED event.
Competitor no longer has .notifyJudged(), as this has been moved to
Competition (no more networking code in Competitor!).
CompetitionInfo and ProblemSetInfo functions have been greatly expanded
to include removing/adding problems and languages, in order for
competition persistence to work as hoped.
As ProblemSet no longer extends HashSet<Problem>, ScoreManager had to
slightly change its scoring code.
getNextUID() was made public so .register() does not need to be the only
way to create users (though it is still highly recommended).
Added CompetitionChangeAction, which notifies the client when something
with the Competition changes. Also registered it with the client
NetworkActionManager.
Server now registers event listeners to Competition to deal with
Competition persistence across clients - all to abstract networking away
from Competitions.