More systematic approach to tool validation

This employs similar technique to what `HasProps.__setattr__()` uses.