To simplify the PlanExecutor interface, the public method PlanExecutor::collection() should be removed. Collection information should logically be private to the PlanExecutor (it is currently only tracked for purposes of the PlanExecutor registration process). Current callers should use their existing Collection pointers instead of calling this method.
The _collection member on PlanExecutor should also be moved to a member on PlanExecutor::ScopedExecutorRegistration. This member should be initialized through new a Collection* parameter to registerExec().