FIELD is not related to OPERATOR and QUOTEVALUE

if operator is provided then do process "LIKE" like operators

QUOTEVALUE has nothing to do with presence of FIELD argument
if operator is 'IS [NOT]' then value is NULL

just force NULL, otherwise it's always a SQL error.
if we asked to quote then quote

we processed IS[ NOT] operator earlier and took
care of QUOTEVALUE argument
indent
drop pointless comments
extract combining function with field into a method
make it possible to pass FUNCTION into Limit method
extend GroupBy's FUNCTION arg with CombineFunctionWithField

In old code when FUNCTION is provided then FIELD and ALIAS
arguments are ignored. CombineFunctionWithField behaves
in the old way if FIELD is empty.
basic tests for group by
no need in variable outside the loop
simplify operations with $clause, no functional changes
no need in %rowhash that is just copy of $row
process FIELD without FUNCTION in CombineFunctionWithField

if FIELD is not set then return FUNCTION or undef

if FUNCTION is not set then return ALIAS.FIELD

otherwise process like before
use new CombineFunctionWithField, shrink code
change how we use CombineFunctionWithField in Limit

apply it unconditionaly as now it handles FIELD just fine

apply it earlier as CaseInsensetivity relate code can wrap
field into a function
don't turn NULL into NULL(ALIAS.FIELD)
documentation for CombineFunctionWithField
docs for subs using CombineFunctionWithField
tests for FUNCTION argument in methods
Update POD formatting slightly