Use the positive `uppercase.any?` instead of negative `.empty?`

- This makes it more readable.
- Also rename `uppercase` to `has_uppercase` - otherwise it sounds like
  a true/false value.
- Use `Set.new` instead of defining a hash for `has_uppercase` -
  slightly shorter and we weren't using the right hand side of the hash.