CHANGELOG:
- Added `const` keyword on every API for parameters and types that are not mutated
- Added LM_DeepPointer(Ex) APIs
- Added LM_CALL for all public libmem calls and callbacks
- Added Python wrapper for better IDE/text editor/LSP support
- Added dynamic downloading for Rust and Python (no need to download, install and link by yourself anymore)
- Added new field `owner_pid` to `lm_thread_t`
- Full rewrite with better project structure and cleaner code
- Changed `LM_FreeDemangleSymbol` -> `LM_FreeDemangledSymbol`
- Renamed pages to segments, since that is more accurate of what they actually represent
- Added `LM_GetArchitecture()` and `LM_GetBits()`
- `LM_DisassembleEx` and `LM_AssembleEx` can now assemble from any architecture to any architecture (very useful when working with emulators)
- Made more rusty bindings for Rust
- Fixed `LM_HookCodeEx`
- Fixed random bugs and issues
- Added ability to assemble from any supported architecture to any architecture (ARM, AARCH64, x86, x64, etc)
- Added `arch` field in `lm_process_t`
- Removed no longer necessary `bits` field from the functions `LM_AssembleEx` and `LM_DisassembleEx`
- Added modern C++ wrapper
- Made Python bindings more pythonic