Refactor features

Refactor features to be less exact (e.g. see an error when creating an invalid target instead of checking each individual attribute. There are unit tests for this that are a whole lot faster).