(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~~
Maybe better to return a Ruby bool instead... so

```ruby
success == WriteConsoleW(@handle, msg_ptr,
                str.length, numberOfCharsWritten_ptr, FFI::MemoryPointer::NULL)
return success != FFI::WIN32_FALSE
```

Or if we want to do something similar to `WriteChar`

```ruby
WriteConsoleW(@handle, msg_ptr,
                str.length, numberOfCharsWritten_ptr, FFI::MemoryPointer::NULL)
return numberOfCharsWritten_ptr.read_dword
```

It's probably not good that we're ignoring the return code's here.  Should probably be raising a `Puppet::Windows::Error` on `FFI::WIN32_FALSE`