Add detection of unused struct fields

This uncovered some dead code, most notably in middle/liveness.rs, which I think suggests there must be something fishy with that part of the code.

The #[allow(dead_code)] annotations on some of the fields I am not super happy about but as I understand, marker type may disappear at some point.
```rust
node.ident().map_or(false, |ident| token::get_ident(*ident).get().starts_with("_"))
```

(Or use the `[0] == '_' as u8` rather than `starts_with`.)