Made inner classes `final` as they shouldn't be subclassed.
Added javadocs to the public methods.

Also changed the behavior of the `BufferedImage` constructor so that
the contents of the original array is copied.