Rewrite overloading implementation

This more or less matches my original proposed API at https://gist.github.com/autarch/de572363115de4239b3a

It fixes the bug that broke HTTP-Throwable (https://rt.cpan.org/Ticket/Display.html?id=98531) and generally makes overloading support correct, including complete support for applying overloading during role composition.