Reduce duplication in JSI GUI objects implementation.
- Store the functions in an unordered_map. A no-container implementation is doable but likely not worth the added code complexity, maybe with C++20
- Move more things into the _impl.h
- Clear out the un-necessary friends declaration in the specific types by moving the functions to the public interface, which makes sense.
- Fix a memory leak (JS::PersistentRootedObject weren't deleted).
This doesn't change what one needs to do to add a new type, but it does reduce the actual code that's necessary, and makes it less error prone.
Differential Revision: https://code.wildfiregames.com/D3214