Half-way between a String and a Rope; concatenates a list of strings into an immutable CharSequence which is either:
If a component is null, it is ignored.
if total non-null components is 0, returns null
if total non-null components is 1, returns that component.
if the combined length <= maxLen, creates a StringBuilder appending them all.
if the combined length > maxLen, creates a Rope appending them all.
TODO do not allow a StringBuilder to appear in output, instead wrap in CharArrayRope