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