Fix #294: Thread-safe HashMap to avoid faulty Consumer notifications

When events are published on a multi-threaded dispatcher (e.g. workQueue or threadPoolExecutor)
by internal worker threads as
for example in the following configuration: `d.compose().map(..).consume(..)`
the end consumer sometimes gets duplicate notifications and sometimes no
notification at all.
The reason is most probably a non-threadsafe call to HashMap.put() which causes
same tailsThreadIndexLookup indexes being assigned to the different worker threads.