CLEANUP: trace/tree-wide: drop trace decoding/definition when USE_TRACE=0
The various trace sources always have the same pattern:
- trace events
- trace source
- trace decoding function
Dropping these when USE_TRACE=0 definitely makes sense. There are two
modes of definition here:
- those designed after mux_h2 which interleave #define and the entry
definition in the event. These ones cannot be removed without a
significant code move to split the #define and usage apart. Instead
here we mark the struct __maybe_unused, so that the compiler will
just not implement it.
- those designed like stream.c where defines are separated. Here we
can simply enclose the events definition inside the USE_TRACE guard
For most of these the static declaration of the trace function was moved
after the events so that the #if defined(USE_TRACE) could be placed between
the two. Nothing else was changed.
This saves another 51 kB of object code when USE_TRACE=0.