Refactor callback mechanism in cucumber project

Every script added to the project decremented a numerical variable. A Semaphore were
created with the value of that variable as starting permits. Callback bricks were
added to the end of each script releasing one permit of the Semaphore. The last script
finishing and releasing the last permit made the Semaphore available again so that a
tryAquire on it succeeds. However when a script was called multiple times too many
releases happened causing the Semaphore to be available too soon and ending the
program.
Now there are two types of Callback bricks. ScriptStartCallbackBrick and
ScriptEndCallbackBrick. They are added at the start end at the end of each script. The
callback methods increase and decrease a counter. The can be called exactly once which
handles the problem of multiple calls to the same script.