wg-toolkit 0.4.0

Toolkit for various binary and text formats distributed by Wargaming.net (BigWorld, Core engine).
Documentation
# WG Toolkit
Toolkit crate providing various implementations for codecs distributed by [Wargaming.net](https://wargaming.net/). 
These codecs are part of the Core engine *(previously known as BigWorld)* notably used by 
World of Tanks. This crate also provides an implementation of the network protocol.

## Library
- [Crate page]https://crates.io/crates/wg-toolkit
- [Crate documentation]https://docs.rs/wg-toolkit
- Packed XML codec
  - Deserialization
  - Serialization
- Tank model codec
  - Deserialization of visual tree
  - Deserialization of vertices/indices
- Compiled space codec *(WIP)*
  - Deserialization of some sections
    - BWTB (header table)
    - BWST (string table)
    - BWT2 (terrain2)
    - BWSG (static geometry)
    - BWCS (compiled space settings)
    - BWAL (asset list)
- Resource virtual filesystem (read-only)
  - Package indexing
  - Reading file either from native filesystem or packages
  - Reading directory entries from native filesystem and packages
- Network protocol *(WIP)*
  - Packets encoding and decoding *(partial flags support)*
  - Appending elements to bundles
  - Assemble received packet in bundles
  - Iterate elements in a bundle

## CLI
- [Crate page]https://crates.io/crates/wg-toolkit-cli
- Packed XML
  - Deserialization and display
  - Value editing (string, integer, boolean, float)
- Resource virtual filesystem
  - Read file content and copy it to stdout
  - Read directory content with possible configured recursion

## WoT CLI
Not yet published, not yet working, but present in the code base, might be integrated to
CLI at some point.

## Contributing guidelines
When contributing to the code base, some rules should be followed:
1. Each major feature should have its own directory module;
2. Each side-feature, used internally by core features should be located under `util` module in its own file module.
3. When working on a custom reader and/or writer, but only implement one of the two, please anticipate how your module would be built with both implemented;
4. Catch all errors and forward them toward the public interface;
5. Custom error types should all be defined using `thiserror::Error` derivation;
6. When working on a custom reader and/or writer that doesn't provide lazy read/write operations, please make simple public functions that directly output, like `from_reader(reader: impl Read)` or `to_writer(writer: impl Write)`.

## Credits
Thanks to SkepticalFox for [wot-space.bin-utils](https://bitbucket.org/SkepticalFox/wot-space.bin-utils/src/master/) python library, which directly inspired this crate.

Thanks to SkaceKamen for [wot-model-converter](https://github.com/SkaceKamen/wot-model-converter) python library, for its open-source work on processed model file format.