Initialize XCallback.extra only if needed

This is a little API change, but it doesn't seemed to be used often
anyway. However, it improves the speed of hooks and allocates less
unneeded objects that need to be GC'd later.
Several performance improvements

- Use an optimized set implementation to manage callbacks
- Faster algorithms to iterate through callbacks
- Store more information with the hook itself
- Less need for synchronized blocks

Requires app_process v44.
Compatibility to avoid bootloops

Added back the previous signature of hookMethodNative() to avoid crashes
with app_process < v43. One devices with S-On or similar, it could happen
that an older app_process become active again.

Newer versions no longer fail if a native method could not be resolved,
therefore this compatibility method will be removed soon.
Use optimized callbacks set for more classes
Trigger layout hooks also if the layout was included

Previously, the callback was only triggered for the root layout because
only for this the inflate() function is called.

The solution is actually a bit tricky because the XML parser for the
included layout is a local variable. But as we hook the creation of the
parser, we can check if it was created in inside parseInclude() and
remember the details for it. This is done with a LinkedList (for recursive
calls) inside a ThreadLocal.

It's assumed that the included view is the last one. This is almost always
the case, except if it's a <merge> layout, which doesn't have its own root
view but merges into the parent. In this case, it's as easy as calling
liparam.view.getParent() to get the container into which all the views
have been merged.
Pass-through the pointer to the original method

Needed for another performance optimization in the binary.
Fix a potential crash in XResources

5ac7b3 introduced a ThreadLocal variable which was not correctly
initialized for all threads. Thanks to Tungstwenty for the heads-up!
Disable all hooks if the initialization failed