win-numa-sys 0.1.1

Memory-safe Rust over the Windows NUMA APIs: a VirtualAllocExNuma-backed buffer, a NumaNode newtype, and the node queries a caller needs to decide what to pass. Thin over Win32, with no policy about which node anything should use.
Documentation
# Checklist: win-numa-sys

Memory-safe Rust over the Windows NUMA APIs. See [README.md](README.md) for what the crate is.

## M1 -- Finish removing the duplication the crate was created to remove

The crate exists because two independent `VirtualAllocExNuma` implementations had appeared in
crates that do not depend on each other. Creating it moved one of them; this milestone removes the
other, and until it does the duplication is **relocated rather than removed**, which is worth saying
plainly rather than counting the crate as done.

- [ ] **N-1.1** -- **Collapse `windows-placement-probe`'s allocator onto this crate.**
  `peer_index_cache.rs` has its own `VirtualAllocExNuma` + `VirtualFree` pair, and that crate does
  not depend on `windows-ioring-sys`, so it never saw the one that was hoisted in `M22.3`.

  **It is not a drop-in, and the differences are the work.** That allocator also faults every page
  in -- committed pages are demand-zero, so until something writes to them no physical page has been
  drawn from the preferred node -- and then *observes* which node the pages actually landed on. It
  is typed over its own `Slot` rather than bytes, and it has a second origin (an ordinary heap
  allocation) that shares the same `Drop`.

  Decide what of that is general before moving any of it. Page-faulting looks general: any consumer
  who cares where pages landed has to do it, and this crate's own documentation already tells them
  so. The typed element and the dual origin look specific to the probe.

- [ ] **N-1.2** -- **Decide whether `QueryWorkingSetEx` observation moves here**, which `N-1.1` will
  force a view on. `observed_node_of_region`, `observed_node`, `working_set_flags` and the
  `working_set` bit constants live in `windows-placement-probe` today. "Which node is this page
  actually on" is a Windows NUMA concept and passes this crate's bar; against that, those helpers
  carry their own tests for the bit layout, and `working_set_flags` exists *separately from*
  `observed_node` precisely so a test can check the layout against a field whose value it already
  knows. Moving them means moving that care too, not just the code.

  Note what this would make possible, since it is the reason to consider it at all: a caller could
  then ask this crate whether a placement request was honoured, rather than being told by its
  documentation that success proves nothing and left to write `QueryWorkingSetEx` themselves.

## M2+ -- Parked

- [ ] **M2+.1** -- **Publish.** The crate is a path dependency of `windows-ioring-sys`, which *is*
  published, so it has to reach crates.io before that crate's next release or the release fails. It
  depends on `io-buffers`, which must reach crates.io first ([N-D-2]DESIGN-NOTES.md#n-d-2), and
  is already registered in `release-please-config.json` and in the publish workflow's tag patterns
  -- both of which this repository has previously been bitten by omitting, silently -- so what
  remains is the decision to cut `0.1.0`, not the plumbing.