Add error checking and recording for fread and fwrite, using SimpleWrapper.

Modify WrappedInputPointer and WrappedOutputPointer to allow manually overriding
the size of the associated read/write (allowing us to implement the void pointer
based usage of fread and fwrite).

Add WrappedInputFILE, which checks that the input FILE * is a valid (open)
stream.
Implement SimpleWrapper-based error checking and recording for ftell, fgetpos,
fseek, fsetpos, and rewind.

Add a new template class, SimpleWrapperImpl, which holds the implementation
of the SimpleWrapper class. There is a specialization to handle the
implementation of wrapping functions with void return type. SimpleWrapper now
forwards to the implementation class.