vu64 0.3.0

variable length encode/decode for a 64-bits integer
Documentation
# Development Tasks

## Core Components

- [x] Implement the `Vu64` struct with `length` and `bytes` fields.
- [x] Implement `AsRef<[u8]>` for the `Vu64` struct.

## Encoding & Decoding

- [x] Implement the `encode(value: u64) -> Vu64` function.
- [x] Implement the `decode(bytes: &[u8]) -> Result<u64, Error>` function.
- [x] Implement `encoded_len` function using a lookup table for performance.
- [x] Implement `decoded_len` function to determine length from the first byte.

## Signed Integers (`signed` module)

- [x] Create the `signed` module.
- [x] Implement `signed::zigzag::encode(value: i64) -> u64`.
- [x] Implement `signed::zigzag::decode(encoded: u64) -> i64`.
- [x] Implement `signed::encode(value: i64) -> Vu64`.
- [x] Implement `signed::decode(bytes: &[u8]) -> Result<i64, Error>`.

## I/O Integration (`io` feature)

- [x] Create the `io` module, conditionally compiled with the `io` feature.
- [x] Define the `ReadVu64` trait extending `std::io::Read`.
- [x] Define the `WriteVu64` trait extending `std::io::Write`.
- [x] Implement `read_and_decode_vu64` and `read_and_decode_vi64` for the `ReadVu64` trait.
- [x] Implement `encode_and_write_vu64` and `encode_and_write_vi64` for the `WriteVu64` trait.

## Error Handling

- [x] Define the `Error` enum with variants: `Truncated` and `RedundantEncode`.
- [x] Implement the `std::error::Error` trait for the `Error` enum.

## Project Structure & Dependencies

- [x] Organize the code into `lib.rs`, `io.rs`, and `signed.rs`.
- [x] Ensure the library has no external dependencies.

## Testing

- [x] Write comprehensive unit tests for all encoding, decoding, and I/O functionalities.