#133 introduce a cacheable CompositeType to reduce reflection costs