Use type.__subclasses__() to avoid having to specialize Tool.get_default_impl()
Merge Tool._detect() into Tool.get_default_impl()