Make TypeDescriptor more amenable to subclassing

Change the previously package scope TypeDescriptor constructor to
protected and add a getResolvableType() protected method.

Issue: SPR-11303