GlueGen: Refine compound [array] call-by-value native code injection and initialization

Follow-up of commit 9843e983a4fc71a64eb3de9cb364a1f4ffa56b3a

Only add static initialization code (java, native)
and hence native code 'JVMUtil_NewDirectByteBufferCopy(..)'
if either required _or_ forced via configuration.

This shall reduce possible sideffects
and dead code.

Add JavaConfiguration:

/**
 * Returns true if the static initialization java code calling <code>initializeImpl()</code>
 * for the given class will be manually implemented by the end user
 * as requested via configuration directive <code>ManualStaticInitCall 'class-name'</code>.
 */
public boolean manualStaticInitCall(String clazzName);

/**
 * Returns true if the static initialization java code implementing <code>initializeImpl()</code>
 * and the native code implementing:
 * <pre>
 *   static jobject JVMUtil_NewDirectByteBufferCopy(JNIEnv *env, void * source_address, jlong capacity);
 * </pre>
 * for the given class will be included in the generated code, always,
 * as requested via configuration directive <code>ForceStaticInitCode 'class-name'</code>.
 * <p>
 * If case above code has been generated, static class initialization is generated
 * to call <code>initializeImpl()</code>, see {@link #manualStaticInitCall(String)}.
 * </p>
 */
public boolean forceStaticInitCode(String clazzName);
GlueGen: Refine compound [array] call-by-value native code injection and initialization

Follow-up of commit 1eadaf928f4f61aae4de1c8bf33c5b77bdfa882f

- Refine MethodBinding detection for 'requiresStaticInitialization',
  i.e. return type is a "compound type" and not a pointer

- JVMUtil_NewDirectByteBufferCopy: Throw FatalError if initializeImpl() has not been called