Messages are now statically type checked.

Message logic has been refactored so that the version of send using
...interface{} is no longer used. Instead the messageContent itself is
passed as an argument to send. This removes all possibility of a runtime
error because of arguments passed to send in the wrong order (it is now
a compile time error).
Bugfix: clear the attendance matrix when a solution is freed.
Set tests are now in their own package.