Custom rdds: support loading from multipage tifs

Main change is supporting reading from multipage tif files using PIL/pillow, if either of those libraries is installed and available. 

A few additional minor changes:
* spark context "sc" used by ImagesLoader moved to __init__ argument from individual load method arguments
* stack dimension "dims" parameter moved to fromStack argument from ImagesLoader __init__ argument
* file extension "ext" keyword argument now exposed on all user-level functions. (Use case is for files saved with slightly nonstandard extensions, like .PNG or .tiff)
Should we also do a check for PIL here? Or some other way to check that imread will read a tif? AFAIK, ``imread`` will throw an error if it's trying to read a tif and neither PIL nor pillow are installed. But ideally we'd catch this before, rather than have the error show up only when a downstream action is performed.