clean ups and tidies
in this commit we have tidied long standing expected changes: 1.1 Removed dead crates** — `netsim-ffi/`, `netsim-async/`, `wrappers/` deleted. Workspace updated to `["netsim-core", "netsim"]`. **1.2 Fixed `set_download_bandwidth` bug** — `netsim-core/src/network/mod.rs:119` was calling `set_upload_bandwidth` instead of `set_download_bandwidth`. Fixed. **1.3 Fixed `Vec<u8>` / `String` `bytes_size`** — Were returning `capacity + 24` (heap overhead). Now return `len()` — the actual bytes that would travel over a network. **1.4 Stabilised multiplexer timing** — Removed the `dbg!` macro, fixed the unused variable warning, changed the timing test from exact-equality to `>= 5ms` (which is the correct semantic for a wall-clock test). **1.5 Drop counters** — `SenderBufferFull` is no longer silently swallowed. Each node now has an `Arc<AtomicU64>` drop counter incremented on each dropped packet. `SimSocket::packets_dropped()` exposes it. 2.1 `configure_link` API** — Full stack: `Network::configure_link(a, b)` in core → `Command::ConfigureLink` → `SimContext::configure_link(a, b)` in netsim. Returns a `SimLinkBuilder` / `LinkBuilder` with `.set_latency()`, `.set_bandwidth()`, `.set_packet_loss()`, `.apply()`. **2.2 `PacketLoss`** — New `PacketLoss` enum (`None` / `Rate(f64)`) in `netsim-core/src/measure/packet_loss.rs`. Wired into `Link` and checked in `Network::send()` before any routing work is done for dropped packets. **2.3 `SimStats` observability** — `Network::stats()` returns a `NetworkStats` snapshot. `SimContext::stats()` sends a synchronous `Command::Stats` to the multiplexer and returns a `SimStats` with per-node stats (buffer usage, bandwidth, drop count) and per-link stats (latency, bandwidth, packet loss, bytes in transit). **2.4 Examples rewritten**: - `netsim/examples/basic.rs` — two nodes, custom latency/bandwidth/packet loss, send and receive - `netsim/examples/congestion.rs` — narrow link, flood with packets, observe drop counter - `netsim/examples/monitoring.rs` — multi-node network, print live `SimContext::stats()` snapshot