Get rid of the strange inheritance relationship between IDonutBuilder and IDonutExecutor by splitting out the class CachedDonutNullOpDonutBuilder