>> self.wait(...) is a kind-of pattern search setup with one or more patterns. 
   Each specified pattern should have a self.matched[..].
   In each self.matched[..] data (address and data bits) is captured and 
   displayed via the self.put() method

self.wait conditions:
    'l' - low level, logical 0;
    'h' - high level, logical 1;
    'r' - signal rise, transition from low to high state;
    'f' - signal decay, transition from high to low state;
    'e' - arbitrary change in signal, rise or fall;
    's' is stable state, 0 or 1.


Order is important:
- The order in class Ann must match the order in class Decoder::annotations
? The order in class Row must match the order in class Decoder::annotation_rows (the latter specifies the on-screen order)
- The order in class Pin must match the order in class Decoder::channels and the enumeration of Decoder::OFF_*

Decoder::self.put has arguments:
    <start_samplenum>, <end_samplenum, <ref_to_registered_annotation>, [<Ann.value>, [<annotation_text>]]
    

