Re-factored principally so that blocking operations can be managed. Thanks also to Nilanjan Raychaudhuri and Rich Dougherty for their contributions.

A self populating cache is now used in order to avoid any thundering herd issue.