Scoped variable RValue

Still a work in progress, but curious what you think about this approach. If this looks worth pursuing to you, the remaining TODO items would be:

- [ ] Decide whether `!` is the token to use
- [ ] Determine the best way to prevent contracts from caching specs containing a ScopedVariable
- [ ] Add the ability for new_contracts to specify multiple args/kwargs, which could be specified via Scoped variables
- [ ] Put tests in a better location
- [ ] Determine if there are other functions a user might call besides `@contract, parse, check, fail, decorate` to specify a spec containing a scope reference
This logic finds the right scope if the user calls `contract, decorate, check, fail, or parse` directly. It does so by searching the callstack for invocations of these functions. If there are other ways a user might send a spec to Contracts, they need to be enumerated here