Failing test case added
While working on this I'd like to ask about the checks for VALUELESS_ constants: isn't it better to use checks for equality by identity instead of .equals() ?
With .equals() it is not possible to use values 'VA_ADD' and 'VA_REMOVE'. Using new String() and == will solve this. The constants are static so this shouldn't be a problem for deserialization. What do you think ?
I think special values VA_ADD and VA_REMOVE should be deprecated.
If AttributeModifier should be able to remove an attribute then explicit #remove(String) method should be added.
+1 to deprecate VA_ADD and VA_REMOVE in benefit of #remove(String), it is better to read.