Good questions, @wburgess !
I'm not an expert on tree-building, but this topic should give you a good place to start exploring.
As for querying available methods by input or output, I don't think anything like that exists at this time. I can imagine tooling like that being a neat addition to the framework, or to specific interfaces, but I'm not sure whether anything like that is on the current roadmap. Searching the library for tools that take a certain input type or produce a certain type of output could be useful. @thermokarst or @ebolyen could probably give you a better sense of the likelihood of something like this being developed, potential technical barriers, etc.
Best,
Chris