Added Volatile Types

This PR adds a nicer wrapper around the volatile intrinsics. It also places the new volatile module under unstable.

I added the following types:

* `VolatilePtr`
* `VolatileInt`
* `VolatileBool`

There is also static types that deal with the specialized types (such as `VolatileBool` and `VolatileInt`)

*  `INIT_VOLATILE_BOOL`
* `INIT_VOLATILE_INT`

These can be used basically the same way Atomics are used (I think). 

Somethings to consider:

* I'm not sure if the static API/method is correct
* Only two specialized types exist (`int` and `bool`). Other types are super easy to add.
* The `VolatilePtr` doesn't work with pure values, because there needs to be a destination pointer for the intrinsics. One way I can think of allowing this directly (without using another variable) is to reserve a new memory region, with the size based on the passed type, and copying the data over to that region.

I added tests for all the current functionality and they all pass on my machine.

Let me know if there's anything else I need to change, add, remove, etc...