Issue #27 Lifecycle stuff, ready for final review pass

Before I start implementing this all over the place!
Right that exactly it. Just read the code `org.ehcache.EhcacheManager#createCache`:

```
// Install:
    final CacheHolder value = new CacheHolder(keyType, valueType, null);
    if (caches.putIfAbsent(alias, value) != null) {
      throw new IllegalArgumentException("Cache '" + alias +"' already exists");
    }
// Do stuff to init, during which some other threads may come around, hit the `CacheHolder` with a `null` in there, these block. Then the thread creating it all calls `CacheHolder.setCache` to unblock these threads waiting for the cache to init. Now that value maybe `null` if we didn't succeed at init'ing the cache. And all these other threads would see `null`. 


```