Concatenate strings also on the right-hand side of an expression that cannot be evaluated. Fix #126

E.g. converts:
  a+'Hello'+'World'
to
  a+'HelloWorld'
When `unsafe` is set, evaluate [...].join() if possible

Close #298
Evaluate [...].join() if possible: minor bugfix

Follow-up to 78e98d2.
More dirty handling of [ ... ].join() in unsafe mode

Close #300
Actually let's move away those monsters from the evaluate function

ev() should do a single thing — evaluate constant expressions.  if that's
not possible, just return the original node.  it's not the best place for
partial evaluation there, instead doing it in the compress functions.
More attempts to determine when addition is associative

Somebody hit me with bug reports on this. :)

Refs #300