Correct trace semantics

Previously,

   traceScope "Z" $ return ()
   readScope

would have resulted in ["Z"]. That's incorrect, it must be [""].

Also in order to have a sensible Alternative instance, it is necessary
to accumulate multiple traces, one for each code-path tried.