Change protection API to decouple clones from values

This PR decouples API clones from their values.
It's passing all tests (Except IO) but there's a few things to be aware of

- Creating an API clone will expose that clone to usercode even if you didn't explicitly expose it yourself.
- Any references shared across multiple Aether instances will **NOT** work.

It might be worthwhile building an API for manipulating the value/clone mappings to allow you to share references among multiple Aether instances, but that's outside the scope of this PR.