optimize string concatenation

Ignore operands that are only empty strings.

Also, refactor the methods to use arrays only where needed.
add field for empty string constant