1. Added MarginalCopula. This enables users to specify different marginal distributions given a single dependency structure
2. Fixed bug in EmpiricalCopula caused by eager conversion of data to pseudo-observations
3. Update EllipticalCopula getitem and setitem logic and removed delitem to better handle parameter updates
4. Convert BaseCopula to a Protocol typing
5. Introduced 3.8 typings and made it backwards compatible by requiring older versions of python to install typing extensions