Throw more helpful error message when people add dependencies out of turn
### Feature description

Detect when `addDependency` is called when it shouldn't be, or with an invalid input (e.g. a step that is in a deeper layer plan) and throw a helpful error indicating what you're doing is not allowed and why.

### Motivating example

See https://github.com/graphile/crystal/issues/1835 for an example of using `addDependency` in the wrong way, resulting in pain. 

### Breaking changes

None.

### Supporting development

- [x] am interested in building this feature myself
- [x] am interested in collaborating on building this feature
- [x] am willing to help testing this feature before it's released
- [x] am willing to write a test-driven test suite for this feature (before it exists)
- [ ] am a [Graphile sponsor](https://www.graphile.org/sponsor/) ❤️
- [ ] have an active [support or consultancy contract](https://www.graphile.org/support/) with Graphile
- [x] am Benjie
