270f5e25

#1701, add a "Redundant module qualifier" hint

Implements #1701, on top of the `require-type-applications` branch (#1637), so review that one first.

Type occurrences like `Map.Map`, `Set.Set` or `Text.Text` stutter: the qualifier's last component repeats the type name. A module may be imported twice, so the qualified import can stay and a second import brings just the type into scope unqualified:

```haskell
import Data.Map (Map)
import Data.Map qualified as Map
```

The hint says exactly that in a note, naming the module the qualifier resolves to via `possModules`:

```
Foo.hs:5:15-21: Warning: Redundant module qualifier
Found:
  Map.Map
Perhaps:
  Map
Note: requires a second import: import Data.Map (Map)
```

When the qualifier is ambiguous (two modules aliased the same), it falls back to "requires a second import of the module, exposing Map".

### Scope

Fires on any type occurrence of the shape `<X>.<X>`, so both `Map.Map` and `Data.Map.Map`, in signatures, `data`/`newtype` declarations, type synonyms, instance heads and expression type annotations. Value-level occurrences are untouched.

### Off by default

Whether the extra import is worth it is a matter of taste, and it fires often on real code (14 hints in `src/Hint/Restrict.hs` alone, so HLint would fail its own lint). It uses the same mechanism as "Use explicit module export list", emitting at severity `Ignore`. Enable with:

```yaml
- warn: {name: Redundant module qualifier}
```

Documented in the `data/default.yaml` template.

### No refactoring

Dropping the qualifier only compiles once the type is in scope unqualified, which HLint cannot arrange, so the hint offers no `Refactoring` rather than letting `--refactor` produce code that does not build.

### Testing

`hlint --test` passes (986). The `<TEST>` block covers positives, the `Data.Map.Map` form, negatives (`Map.Key`, `Data.Map.Strict.Map`, `M.Map` under a non-stuttering alias, value-level `Map.Map`, the import declaration itself), and asserts both the severity and the note text. The note test carries a real import so it exercises the scope lookup rather than the no-import path.

`hints.md` regenerated.

https://claude.ai/code/session_01JbL9Ex7jZ7ANs2HMeSuWgd