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...