(PUP-2738) - Refactor FFI memory consumption / usage

~~- Causes 14 test fails with Invalid Memory Object, so might
   be on to something here~~
~~- one of the MemoryPointer auto-free / block style calls has been
   removed from windows/file.rb ... resulting in 28 less failures
   need to investigate further~~
Ah yeah, I think this makes sense.  I think we need either a `return` statement here from the inner call against `read_dword`.  Or we need to store the value in a temp variable and return that at the end after all the blocks are done.

I'm pretty sure this is what tripped me up on a couple of those commits where I noted the `return`.