(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~~
You still get a `LocalJumpError` if the caller doesn't use the block syntax, because there's a `yield` in here.

AFAIK, `&block` in the arg list is optional, and just wraps it up in a proc, if you need to refer to it in the method.