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.