Fix double-formatting of UserExceptions

Previously, both the __str__ method of UserException would run the
exception through WalELogger.fmt_logline() and so would the
instance-method to WalELogger.log().  This resulted in output like:

    wal_e.main   ERROR    MSG: MSG: invalid backup query submitted
            DETAIL: The submitted query operator was "/tmp."
            STRUCTURED: time=2013-09-08T11:28:32.788848-00 pid=2130
            STRUCTURED: time=2013-09-08T11:28:32.788912-00 pid=2130

Where "MSG" appears twice and "STRUCTURED" appears twice.

The second level of formatting treated the first level as an opaque
string, which is why only "MSG" and "STRUCTURED" were repeated.
More robustly print multiple stored exceptions

This would die with a crash in event that a non-UserException was
propagated, because such exceptions won't have "msg", "detail", "hint"
fields, and so on.

Try to format things the normal way in event it's an expected sort of
exception, otherwise print the exception with its __str__ rendering.