Use FFI to manage pointer in RootCerts module

Previously, we made assumptions about the layout of the CERT_CONTEXT structure,
specifically that PCERT_INFO (pointer to CERT_CONTEXT) was a 32-bit pointer,
and magically accessed the size of the returned structure as arr[2].

This commit uses FFI to define the layout of the CERT_CONTEXT structure, uses
named fields, e.g. [:cbCertEncoded], to access offsets within the structure,
and uses the FFI::Pointer#null? method to check for NULL pointer.

Note that we use FFI::Pointer and not MemoryPointer, because the
CertEnumCertificatesInStore function frees the previous CERT_CONTEXT, provided
it is not NULL.

Also in the motto of "don't stub what you don't own" it exercises the Win32
APIs to make the tests more meaningful.