Add simple test for malloc and free.
Correct initialization checks for loading structs.

When loading a StructType, check the memory access for the individual elements rather than the complete structure, as it is not necessary for padding bytes to be initialized.
Don't raise errors for null pointer objects.

This changes the pointer target checking to only raise a runtime error if there is a non-null, invalid pointer target. This prevents raising false positives in situations where we just don't track pointer information correctly. In these situations we will still raise errors for accesses to uninitialized memory, which will have to suffice until the pointer target tracking is more thorough.
Add tests for using pointers passed in a struct or returned in a struct.