`Markup.escape`:: make the unicode conversion done by Markup on its content more robust (i.e. use `to_unicode`).
This will in particular help for old plugins that wrap UTF-8 strings in Element or Markup objects (or simply `escape` them). Fixes #3543.
`Fragment.__str__`:: the conversion to a string of a Fragment `f` now returns either a plain `unicode` object (for `unicode(f)`) or a `str` object (for `str(f)`), instead of a Markup object in both cases. This avoids problem of double protection against HTML escaping, as seen in #2580.
That is, when doing `req.hdf[data] = unicode(x)`, we should always be able to assume that this hdf 'data' will be properly HTML escaped.
In addition, this is consistent with what's done in [markup:source:/trunk/markup/builder.py@...#L40 Markup].