Only call TupleEntryCollectors when Cascading allows it.

Cascading expects the TupleEntryCollectors to only be called when a thread is currently in a method such as operate or cleanup.  This patch adds a semaphore to prevent other threads from calling a collector if one of the appropriate methods is not being executed.  Not doing this resulted in ConcurrentModificationExceptions and other spurious problems.