Changed version number to 0.4.0
Changed from C array to std::array.
Added description to BaseSurface
Made constructors protected
Minor edits
Added reference counting to Surface objects
Minor edits
New open/close structure.

Moved to a init/quit/open/close structure much more similar to standard
SDL. This means that the user needs to be more careful when initializing.
The advantage is that it is more transparent.
Changed surface info functions to use streams.
Finished overhaul.
Add error control to surface load
Additional chained construtor
Update TODO list
Added debug logging to Surface create/destroy
Changed blit function to take const Sprite ref.
Added constructors to Sprite
Minor alignment of comments.
Simplified overlap functions.
Renamed name -> tag for sprites.
Added constructors for allocating to Surface