Merge upstream

_Depends on #4._

This reverts our shared example refactoring (#1), because lazy shared examples were also implemented upstream (albeit a bit differently): petejkim/specta@3c845c57624410c8fe7654c3b34ded6a3e77c241.