Fix dropped UnknownArrayHandle symbols
For some reason, GCC is dropping the templated function instances use for the `UnknownArrayHandle` constructor. Apparently, something in the compiler or the linker is being over aggressive about removing unused symbols and is actually dropping symbols that are being used. Maybe it is because the functions are not directly called but their pointers are used. To get around this problem, mark these templated functions in UnknownArrayHandle.h with the `used` attribute to force the compiler/ linker to keep them. There should be no consequence to that as these function templates are only instantiated if they are used.