(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~~
Using begin-ensure blocks within a block always make me wonder what the block returns. I think it's always what `yield token_handle` returns. But if you have something like:

<pre>
def bar
  'from bar'
end

def baz(&block)
  begin
    yield
  ensure
    bar
  end
  'whoops'
end

puts baz { 'in baz' }
</pre>

Then you actually get `'whoops'`