refactor the jni layer

we do not wish to have to dispose minor objects like references.
instead, we want immutable objects that have no native backing and
can simply be handled by the jvm's gc.  thus, the jni layer creating
objects directly seems superior.  apply this pattern to jni across the
board.