Support STI in Decoratable.decorate

Closes #468.