Split `utility` header into SFINAE, queries and transformations
* `utility.h` contained a collection of various utility templates for transforming and querying types as well as enabling function overloads
** as these features are required throughout the whole library, changes to this header files caused complete recompilation
*** this is why they were separated according to their purpose
** i.e. `query.h`, `transformation.h` and `sfinae.h`
* created new `type` folder in `detail` to contain the newly separated header files
* changed all headers making use of `utility.h` accordingly and only included the parts that are actually required by each instance