Watermark transformation and ImageReader

This pull request adds a watermark transformation. For it to be used, I had to introduce a way for transformations to read images from storage.

To prevent transformations from having write-access to the storage, I made a simple wrapper class (ImageReader) for the read-only functions (getImages and imageExists) which is instantiated and populated to any transformation which implement the new ImageReaderAware-interface. To ease this integration, I made an ImageReaderAwareTrait which defines setImageReader and getImageReader.

Changelog, documentation and unit tests are updated with these changes and included in the PR.