jni: refactor jholder class to be much smarter with copies

This is effectively a rewrite, so unfortunately cosmetics are mixed in as well.
Since it no longer matches upstream at all, it takes on our cosmetics.

See jutils/jutils.hpp for documentation.

This fixes many subtle bugs in our jni usage, mainly involving copying objects
around.
jni: be explicit about what we're doing here
jni: explicitly create an element of the abstract type

Don't count on emplace to do what we want.
jni: no need to release() anymore
Merge pull request #3371 from theuni/android-jholder-rewrite

Android jholder rewrite