* Appenders are now decorated via 2 separate mechanisms: a per-appender
decorator (as before), and a new per-juxt (i.e. combined) decorator.
The per-juxt wrapping provides a performance-conscious hook for
higher-level facilities like the new middleware feature.
* Moved compile-time config wrapping from per-appender to per-juxt,
improving performance.
* Fixed appender wrapper ordering.
The `assert-valid-logging-level` macro had the unfortunate side effect of
preventing the use of runtime-evaluated logging-levels.
To get around this without impacting performance, `assert-valid-logging-level`
has been removed and the validty checking moved to the (memoized) level
comparator.
This is cleaner, more flexible, and no slower.
Changes to config structure:
* [:shared-appender-config :timestamp-pattern] -> :timestamp-pattern
* [:shared-appender-config :locale] -> :timestamp-locale
* Add :prefix-fn
Motivation: timestamp options aren't actually config intended for
appenders. Having them in :shared-appender-config was unnecessarily
confusing.
The addition of :prefix-fn allows full control of prefix strings in a
way that carries over automatically to all appenders. Previously,
adjusting prefix text required modifying appender fns.
Changes to default appenders:
* Drop [:appenders :standard-out]
* [:appenders :standard-out-or-err] -> [:appenders :standard-out]
Motivation: the :standard-out-or-err appender was already the default
anyway, and the presence of the :standard-out appender was just
confusing.