0000655: Editable age group property

Administrators can now change a participant's age group.
Fixing semaphore tracking

Semaphores were not being tracked individually.  This update tracks
each semaphore by file inode where the semaphore is acquired and released.
Removing unused function
Making primary key errors more informative
0000675: Running Reports (CSV vs Excel)

Since running reports in Excel format can sometimes overwhelm the server
there is now a limit of 20,000 cells when using Excel format,
Merge remote branch 'origin/qa' into release

Conflicts:
	api/exception/error_codes.inc.php
Adding additional test to delink operation

The operation now makes sure that the withdraw_letter coincides with
one such that the participant did select a delink option when completing
the withdraw script.
Tweaking role operation access (languages)

The last update didn't quite get the language operation permissions
correct.
Making a temporary adjustment to cache Opal variables

Opal has been tempermental in responding with variables on demand so
a temporary change has been made to make use of locally cached values.
Adding semaphore-counting

It is now possible to acquire more than one semaphore during the same
runtime.  This is done by counting semaphores and only actually acquiring
one when the count is incremented to 1 and releasing it when the count
is decremented to 0.