Allow a reason="foo" in lint attributes

Also add a lint that asserts that all lint attributes have a reason (allow by
default).

Closes #3358