pixelscript 0.4.0

Multi language scripting runtime
Documentation
# TODO

- add rust first functions? (i.e. in lib add rust specific functions.)

- file io
    - add_loader_callback (file_loader)
    - Optional

- Make better use of anyhow
- Make better use of '?'
- C tests
    - Lua
    - Python
    - JS
    - Easyjs

- Add a LSP

## v0.4
- Lazy Init

## LSP
- Remove ModuleCallbacks just use Function
- Remove ModuleVariables just use PixelVariable {name, var}

## Functions
<!-- - Use a Vector for lookup. -->
- Use VarList instead of argc and argv?

## Modules

## Objects
<!-- - Use a Vector for lookup. -->

## Vars
- Add exceptions
- Add Map
- Wrap `pxs_Var` in a rust `Var` that contains the deleter via a Option.

## STD
- Add std library via pixelscript runtime. These are optional and handled via features
    - json
    - math
    - io
    - os

## Lua
- Add Object.get
- Add Object.set

## Python (rustpython)
- Eventually look back at this

## Python (PocketPy)
- Make callback global. i.e. one per thread
- Make object callbacks global. i.e. one per object

## JS
- add_variable
- add_callback
- add_module
- execute_javascript
- module_add_variable
- module_add_callback
- module_add_module

## easyjs
- add_variable
- add_callback
- add_module
- execute_easyjs
- module_add_variable
- module_add_callback
- module_add_module

## Starlark ([url]https://github.com/facebook/starlark-rust)
- add_variable
- add_callback
- add_module
- add_object
- module_add_variable
- module_add_callback
- module_add_object
- object.call
- custom imports
- execute_starlark


## Maybes
- Enums?
- Removing Strings for internal use. I.e. object ids in Python. Try using i32 instead.
- Instead of defining everything AOT. Define it JIT for memory.