### What it does
Checks for lifetime annotations which can be removed by
relying on lifetime elision.

### Why is this bad?
The additional lifetimes make the code look more
complicated, while there is nothing out of the ordinary going on. Removing
them leads to more readable code.

### Known problems
- We bail out if the function has a `where` clause where lifetimes
are mentioned due to potential false positives.
- Lifetime bounds such as `impl Foo + 'a` and `T: 'a` must be elided with the
placeholder notation `'_` because the fully elided notation leaves the type bound to `'static`.

### Example
```
// Unnecessary lifetime annotations
fn in_and_out<'a>(x: &'a u8, y: u8) -> &'a u8 {
    x
}
```

Use instead:
```
fn elided(x: &u8, y: u8) -> &u8 {
    x
}
```