i changed the api to not have a global wasm instance anymore. now
initWasm returns a WASM instance you have to pass down to the functions.
i feel like this is the best as it means you wont deal with a race
condition if you're messing with it more then once at the same time,
like i'm doing with tests.
i also accounted for the height given as that was the original
calculation that the Blurhash C implmentation used, not width * width,
width * height.
the api now requires you to call an async function initWasm to make the
functions work instead of using top level await. i also optimized the
wasm module to have O3 and fast-math (which the original blurhash
makefile had and the results do seem to be the same with the javascript
blurhash).
I also gave the wasm instance functions inside typescript types and i
fixed a bug where i didnt free the pointers in order so if you called
decode too many times, you will run out of memory.