Maybe `clear` should call `release()` and then remove the handles from the storage:

    def release(): Unit = for (h <- handles) h.release()
    def clear() {
      release()
      handles.clear()
    }

Also, we should ensure that a `Handle` is not a part of more than a single storage - an exception should be thrown if you try to add a `Handle` to 2 separate storages, or twice to the same storage.
We want to establish a clear ownership of the handle.