Improve Signal performance by 30% and reduce memory allocations to zero calling execute()

Modified the behavior after monitoring usage in Adobe Scout.

In my example scene there were about 2000 memory allocations every frame just from Signal.execute calls.  All of this was down to the temporary rest array in the signature.

Changed the method to take named optional parameters instead and defaulted them to undefined as opposed to null.

As an additional performance improvement unwound the switch statement into a branched if tree.