keep finalised device memory in a nursery so it can be reused

for programs such as the fluid simulator, which use many arrays per time step, this results in ~25% improvement.
nursery: allocate in chunks

This way we can lookup the nursery using equality. Last I checked CUDA libraries allocate in chunks as well.
wibble
add specialisations
nursery: convert from IntMap to HashTable