Add ByAttribute locator impl, FindsByAttribute interface

It's nice/convention to do `requireNonNull(attribute, "attribute")` because then the stacktrace tells you what parameter was null instead of just a mysterious "NullPointerException"