SIP-23

I'll just open this PR with @adriaanm's work on SIP-23 here to spawn some conversations. This implementation seems to solve all the issues I've been seeing in #45.