(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~~
My C# background is partially what had me confused btw.. 

```csharp
using (var foo = new Foo())
using (var bar = new Bar(foo))
{
  return bar.DoIt();
}
```

Forgetting for a second that C# has explicit returns, but the similar-to-block-syntax in C# assigns doesn't have two things coming out of the `using`.  Assigning `new Foo` to `foo` is roughly equivalent to the `do |foo|`.  But in C#, that's also what's being returned... there isn't another return value like we get in Ruby.

Good lesson to learn ;0