define _traits based on final list of named traits, rather than initial list

this means the _traits list doesn't include anonymous traits, but this is no great loss
support duplicate checking for named traits only

previously implementation didn't work at all as it was comparing trait objects to TraitInstances, which could never work
implement explicit trait requirements
test requirements
test duplicate guard
0.5.0