Move audio callback from AudioSpec into AudioDevice

Though this is not 100% compatible with SDL2, this makes API much
more consistent and less error prone. For example, you don't need
to store AudioSpec along with AudioDevice just to have your callback
lambda around, you don't need to copy AudioSpec from Wav file just
to fill in the callback (see wav demo), you are no more obliged to
take care of locking AudioDevice while replacing the callback.
Exception safety

Suck callback in only after everything was created to not needlessly
destroy it if exception is thrown in the constructor
Implement empty constructor for AudioDevice::LockHandle

Useful if lock must be initialized after it was created
Implement empty constructor for Texture::LockHandle

Useful if lock must be initialized after it was created
While here, deinitialize all fields of an object which was moved-from
Update readme
Use more consistent name for an option
Update copyright years
Update project comment
Use correct exception

SDL2pp::Exception doesn't is not suitable here as this is not an SDL
error. Incorrect argument is a logic error.
Silence warning on Release build
Name header file after class it defines
Add StreamRWops class
Make header tests completely automatic
Make StreamRWops work with istream/ostream

Streams do not generally work well with RWops because
* streams have separate read and write pointers
* ostream doesn't allow you to determine how many bytes were actually written
* istream and ostream have separate set of functions

Try my best to support streams in RWops though, engaging some template
magic:
* provide separate template implementations of all operations which
  depend on whether stream is an istream or ostream. This allows to
  e.g. return 0 immediately for an attempt to write() to istream.
* disallow StreamRWops for classes which are both istream and ostream
  to not run into ambiguity of separate read/write pointers
* for read failure, but partially read object back to the stream to not
  lose data for following read (not sure that e.g. fread behaves so
  though; I'll anyway expect user to Seek() after read or write failure)
* for write failure, there's no way to avoid leaking partial data to the
  stream

In general, it is best to use this container as read-only.

Also add tests for StreamRWops
Allow ContainerRWops to work with both const and non-const containers

Analogus to how StreamRWops work. Also add more tests for
ContainerRWops.
Fix build on older CMake versions

MAKE_C_IDENTIFIER seem to only be available on relatively new CMake
versions, so replace it with similar REGEX REPLACE.
Implement fixed integer r/w methods
Merge branch 'audio-fixes'
Merge branch 'texture-lock'
Merge branch 'rwops-improvements'