(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~~
The block form of MemoryPointer.new [returns self](https://github.com/ffi/ffi/blob/1.9.0/ext/ffi_c/MemoryPointer.c#L81):

<pre>
irb(main):004:0> FFI::MemoryPointer.new(:long, 1) { |ptr| 0xdeadbeef }
=> #&lt;FFI::MemoryPointer address=0x32fa490 size=4>
</pre>

So then the outer `FFI::MemoryPointer.from_string_to_wide_string(str) do |msg_ptr|` block is going to return the inner memory pointer instead of `read_dword`