KernelEffects are things that affect the state of the Kernel
- Apply a rewrite (giving a whole new lower-level AST).
- Change the current location using a computed path.
- Change the currect location using directions.
- Begin or end a scope.
- Delete an AST
- Run a precondition or other predicate that must not fail.