performance enhancements

- global lock free hash generation
- trade a larger ets table for two ets reads

The latter enhancement trades memory for an extra ets lookup. This
leaves more memory available for messages and drains. The two ets
lookups are performed on different tables to increase concurrency.

Futher optimizations could be made by reducing the firehose stat
increments.

Credits go to @ferd for these suggestions.