The Bitmap API is now fully mutating:
- all state-changing methods (`set`, `remove`, `grow`, `clear`, `filter`) return `this`
- bitwise operations (`and`, `or`, `xor`, `andNot`) no longer clone internally and now mutate the current bitmap
- functional (immutable-style) usage is still possible via explicit `.clone()`
- removed implicit cloning from all arithmetic operations
This change makes the mutation semantics consistent and predictable, while keeping optional immutability available through manual cloning.
- grow now accounts for bit index + 1 when computing required byte length to avoid off-by-one at byte boundaries
- contains/remove use explicit bounds checks (idx >= this.bits.length) instead of relying on truthy checks
- and clears tail bytes not covered by the shorter operand
- or/xor expand the result to encompass a longer operand so all bits are preserved
- update behavior to be more predictable and safer; tests pass