Cleaned up a couple of method javadocs in GanymedeServer and GanymedeSession
Added getPermBases() to DBStore, made DBSchemaEdit commit update it.

This just speeds up lock acquisition a bit in DBPermissionManager.updatePerms()
Fixed regression in DBPermissionManager that broke end-user logins
Rewrote DBPermissionManager.updatePerms() to use DBReadLock for consistency

Previously, there was nothing to stop transactions committing changes on
the roleBase and/or personaBase during updatePerms(), which could lead to
inconsistent permissions being returned from the getPerm() methods in
DBPermissionManager.

This commit also fixes a recent inversion in the rolesWereChanged() and
personaWasChanged() methods which caused updatePerms() to always do a full
recalc of perms, even if the roleBase and personaBase had not been changed
since the last call to updatePerms().
Added drain() method to XMLTransmitter and FileTransmitter
Fixed never-completing write thread in SyncRunner.writeFullStateSync()

writeFullStateSync() was creating an XMLTransmitter before making
sure that the FileOutputStream creation succeeded.  This made it
possible for an IOException to be thrown, stopping the writeFullStateSync()
method from reading from the XMLTransmitter, thereby causing the
XMLTransmitter's writer thread to potentially block, thereby hanging
with a DBDumpLock established.
Made DBPermissionManager call updatePerms() before checking supergashMode

This is needed for us to be able to drop supergash privileges when
another transaction removes it from us.
Made DBPermissionManager null out its PermMatrix when in supergashMode
Improved debugging instrumentation in DBLock classes
Corrected translation property name for string in DBPermissionManager.updateDefaultRoleObj()
Renamed DBPermissionManager.isMemberAll() to isMemberOfAllOwnerGroups() for consistency.
Renamed DBPermissionManager.isMemberOfOwnerGroups() to isMemberOfAnyOwnerGroups()
Updated the copyright date in the aboutGanyDialog.