Dispose on unload

The issue addressed has to do with situations where the JVM is apparently unloading JNA’s native library prior to running Java object finalizers.

* Invoke `Native.dispose()` when JNA's native library is unloaded. 
* Added disposal of all `Memory`, `CallbackReference`, and registered Direct mappings