(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~~
Yeah, we want to return the `FFI::MemoryPointer` to match similar semantics to `FFI::MemoryPointer.from_string`, which is to return a new `MemoryPointer` pointing to the string, that can be used in native calls.

The difference with ours, is that by yielding the `ptr`, it's more opinionated, and forces callers to use block syntax, ensuring that `free` will be called.  If you don't use block syntax, you get `LocalJumpError`