Introduce caching for configured RowMapper/ResultSetExtractor.
We now create RowMapper/ResultSetExtractor instances only once if they are considered static configuration.
A configured RowMapper ref/class is always static.
A configured ResultSetExtractor ref/class is static when the extractor does not accept a RowMapper or if the RowMapper is configured.
Default mappers or projection-specific ones require ResultSetExtractor recreation of the ResultSetExtractor is configured as Class.
Reuse TypeInformation as much as possible to avoid Class -> TypeInformation conversion.
Introduce LRU cache for DefaultAggregatePath to avoid PersistentPropertyPath lookups.
Introduce best-effort quoted cache for SqlIdentifier to avoid excessive string object creation.
Closes#1721
Original pull request #1722