Move instead of copying

Copying multi gig datasets takes too long
Clean up fork diff

This also fixes a few issues, due to missing bookkeeping in windows
code.
Behave better when close to virtual memory limit

When we cross .95 of virtual memory, we set max memory to its current
size so that future allocations require eviction.  This assumes constant
(or decreasing) fragmentation ratio in order to work effectively.