code: public synchronized Value get(Key key, CloseableListenable user) {
  		Data<Value> data = map.get(key);
  		if (data == null) return null;
  		data.users.add(user);
  		if (user != null)
  			user.addCloseListener(new Listener<CloseableListenable>() {
  				@Override
  				public void fire(CloseableListenable event) {
  					event.removeCloseListener(this);
  					free(data.value, event);
  				}
  			});
  		return data.value;
  	}
docs: Return the cached data corresponding to the given key, or null if it does not exist.
  The given user is added as using the cached data. Once closed, the user is automatically
  removed from the list of users.