ThrowIfNotCacheable => I found it interesting that we allow caching of non-cachable types if we return null.  Another way to implement this would have been to check the Expression return type right?