Executors are built by resolvers and can be cached by the infrastructure to repeat an
operation quickly without going back to the resolvers. For example, the particular
constructor to run on a class may be discovered by the reflection constructor resolver
- it will then build a ConstructorExecutor that executes that constructor and the
ConstructorExecutor can be reused without needing to go back to the resolver to
discover the constructor again.
They can become stale, and in that case should throw an AccessException - this will
cause the infrastructure to go back to the resolvers to ask for a new one.