The actual code for operating on elections: maintains the collection
of elections and has methods which Worker threads and the election
server manager can call. This class is effectively immutable: all
operations are passed through a mapping of election names to
Election objects, and the mapping does not change once the server
is up and running. Concurrency control is on individual elections,
since we don't need concurrency control on the server itself.
<br/><br/>
Operations called by the election server manager have a display
argument, which is how they display results (i.e. no return values);
they may also throw a DisplayException to display an error.
Operations called by worker threads throw exceptions to indicate
errors, and return results normally.