this is my current draft for `StreamSignature`:
```
from amaranth import *
from amaranth.lib import enum, data, wiring


class StreamSignature(wiring.Signature):
    def __init__(self, data_shape, *, lanes=None):
        try:
            Shape.cast(data_shape)
        except:
            raise TypeError(f"Stream data shape must be a shape-castable value, "
                            f"not {data_shape!r}")
        if lanes is not None and not (isinstance(lanes, int) and lanes >= 1):
            raise TypeError(f"Stream lane count must be a positive integer, "
                            f"not {lanes!r}")
        if lanes is None:
            dimensions = ()
        else:
            dimensions = (lanes,)
        super().__init__({
            "data":  Out(data_shape).array(*dimensions),
            "valid": Out(1).array(*dimensions),
            "ready": In(1)
        })
```