Unlock existentials for all protocols

Swift existential types provide value-level abstraction, allowing values of varying concrete types to be used interchangeably as values of the same existential type. In this accepted Swift evolution proposal, the authors outline their objective of alleviating some current limitations which impact the ability to use protocols as existential types.