Turned ManifestComponents into dataclasses
IngestionManifest has not been turned into a dataclass since its __init__() method has logic in it.
ManifestComponentIF instances (except IngestionManifests) will no longer be missing attributes; attributes that used to be missing will now just be None. I didn't see any cases where we wanted attributes that could be missing to be included in their class' JSON when they're None, so I changed the to_dict() methods to exclude them in this case.
Docs for dataclasses can be found here: https://docs.python.org/3.10/library/dataclasses.html