Add utility IsCompileTimeConstant and use it in HybridFunctor
Summary
The type-trait IsIntegralConstant checks exactly for a type std::integral_constant<T,value> but does not allow any derived classes or user-defined classes with the same interface. Example of such compile-time constant is std::is_same<S,T>.
The new utility is directly used to implement HybridFunctor to allow a wider range of compiler-time input.