use semaphore to keep JournalReader from busy waiting on new data

properly trigger shutdown by interrupting JournalReader thread in case it was blocked on the semaphore

renamed SpoolingMessageHandler to JournallingMessageHandler to keep the terminology consistent.