rfctr: replace TestCase-based in test_picture.py
rfctr: rename Image to ImagePart
rfctr: refactor DescribeImagePart to pytest
rfctr: refactor DescribeImageCollection to pytest
img: make ImagePart.sha1 a public lazy property
img: rename ImagePart._scale() to .scale()

It is part of interface used by _SlideShapeTree.
img: trim file path state var down to filename

Calculate filename right in _load_from_file() rather than carrying the
whole file path as object state.
rfctr: add BaseSlide.get_or_add_image_part()

Simplify call sequence to get_or_add an image part to a slide:

* Replace BaseSlide._add_image() with .get_or_add_image_part()
* Remove _SlideShapeTree._get_or_add_image_part() and call
BaseSlide.get_or_add_image_part() directly from .add_picture(),
eliminating a trivial helper method.

Also:

* resequence Slide.new()
rfctr: add Package.get_or_add_image_part()
img: add _ImageParts.get_or_add_image_part()

Use new _ImageParts object in Package.get_or_add_image_part()
implementation, replacing use of ._images and ImageCollection
img: add Image.from_file()
img: add Image.from_blob()
img: add Image.sha1
img: add _ImageParts._find_by_sha1()
img: add _ImageParts.__iter__()
opc: add OpcPackage.iter_rels()
img: remove now-dead ImageCollection

* remove PartCollection, as this was the last remaining subclass.
* Remove tests and test file.
* remove now-dead Package.after_unmarshal()
img: change ImagePart.new() call signature

* resequence Package.open() method
* fix scale and size fixtures to remove dependency on ImagePart.new()
* Remove ext parameter from __init__ and local var and calculate from
partname instead.
img: add Image.ext
img: implement Image._pil_props