Instead of pushing the op to the pipeline, let the changelog reader accumulate them for a while. Once enough are there, browse the list and try to push to the pipeline those that are old enough, or if there is too many in the queue.

That way if might be possible to ignore some of the record we can't normaly ignore. For instance if a CREATE is followed by a CLOSE, the CLOSE can safely be removed since RH will do for the CREATE will it would have done for the CLOSE. This optimization is only possible if neither have been processed by the pipeline.

Added 3 new config options to the changelog reader:
- queue_max_size: size of the internal operation queue; do not keep more than this number of operations
- queue_max_age: do not keep operations older than this many seconds
- queue_check_interval: check whether some operations in the queue should be flushed at this interval
Use a hash table to keep track of changelog record with same id instead of browsing the whole op_queue.
(WIP) Store uid and gid in the database, instead of names. That replaces the owner and gr_name attributes with uid and gid.

TODO: request with wildcards in username or group names are not supported.
(WIP) Re-organize the changelog reader to process the renames diffently. If a CL_EXT is expected, temporarily store the CL_RENAME record. If the next operation is the expected CL_EXT, then process both at the same time.

The code is still doing UNLINK/RENAME/EXT, but eventually RENAME and EXT will be collapsed.

This fixes test 108b.
Add list.h to Makefile.am
When a changelog thread terminates, clear the commited records from Lustre's changelog.
Fix Cray copyright string.
Added a Cray copyright.