API Design question, AXI has transaction IDs which allow results to be returned out of order, their width is implementation defined. Currently I have an ID feature:

```python
# TODO: Should we strict to spec compliant feature sets, ie !last => !lock, etc
# TODO: USER Signalling???
class Feature(enum.Enum):
    """Optional Wishbone interface signals."""
    LAST    = "last"
    BURST   = "burst"
    REGION  = "region"
    LOCK    = "lock"
    CACHE   = "cache"
    QOS     = "qos"
    ID      = "id"
```

and then in my signature I have:
```python
class Signature(wiring.Signature):
    """AXI4 interface signals.

    Parameters
    ----------
    addr_width : int
        Width of the address signal.
    data_width : ``8``, ``16``, ``32`` or ``64``
        Width of the data signals ("port size" in Wishbone terminology).
    id_width : Optional[int]
        Width of the id signals
    """

    def __init__(self, *, addr_width, data_width, id_width = None, features=frozenset()):
        ...
```
 And in the diagnostics I enforce `id_width is not None` implies `"id"` feature and implies `id_width > 0`