blkfront: spec the pure pipelined block frontend
Tests first, implementation to follow separately. The state machine is
now strictly value-in, value-out -- no shared page, no Cstruct: it
tracks in-flight ids against the ring depth, outgoing builds the
request value (up to the blkif segment limit of 11, validated) and
completed consumes decoded responses, releasing every in-flight
completion so concurrent callers can share the ring without one
drain discarding another's response; the adapter owns the ring
cursors, the encode and decode, and the waits. The spec makes a full
pipeline backpressure instead of death, one scattered request carry a
multi-page transfer (a partial tail as a partial segment), and the
sized read/write refuse a non-sector length. The adapter currently
bridges with one single-segment request per page and State.completed
is a hard-failing stub; the failing cases are the implementation's
work list.