The dangers of code duplication:
Forgot to update MemoryStream::ReadAt() (template version), so it
wasn't throwing an exception on error. This caused all kinds of
problems in case we read a memory stream out of bounds.
Improve throwing by throwing const char*
Less code duplication
Remove debug output
Made Write functions accept const pointers for source.
Keep a pointer to a Stream instead of a MemoryStream. No functional change
but this is more correct.
Remove templated implementation of ReadAt() from MemoryStream since now we
 never call it directly but call the base class method.
Use a std::string instead of calling CString() repeatedly.
Also change ReplaceData parameter from MemoryStream to Stream
Remove this-> pointer
Removed old and unused stuff from Resource.h
Made Stream a virtual abstract class by unimplementing ReadAt().
FileStream::Size() was shadowing the base class method, since it was missing
the const specifier