treat all arguments to concat functions consistently

Currently the first argument must be of the appropriate type to avoid surprising results, but arguments beyond the first may be of any type.

/cc @buzzdecafe, @CrossEye, @megawac

I have some other ideas depending on how evil you're willing to be