allowing preEmit to change arguments

This PR implements the previously discussed functionality that if `preEmit` returns an array, that should be used as arguments instead when passed on to `shouldEmit` and (potentially) `trigger`.

I considered allowing returning non-undefined non-array values too and just wrapping them in an array, but then things get somewhat unintuitive if what you actually want is a single parameter that is an array.

Always returning an array might be clunky when you only want one parameter, but it means less space for misunderstanding.