Add a type parameter to AttrName.

This pull request adds a type parameter, yielding AttrName<T>. As shown in the test, the original motivation is to provide friendly shortuts on restrict (other operators might benefit from it too), such as:

```java
restrict(suppliers(), NAME, (name -> name.indexOf('a') > 0))
```

In the example above, NAME is defined as Attr<String>, which allows that String parameter to be captured and passed to a String-based predicate, which is nice to use and see.

However, it obviously leads to such a generics nightmare so that I'm not sure it's worth it. @etcinitd WDYT? Any experience with those genetics stuff. Mine is old and was pretty bad...