Rename assert to enforce, add debug_assert

Currently `assert!` is used to enforce invariants, not just doing sanity checks that get removed in release builds (unlike traditional asserts). This changeset renames them to `fail_unless` (and `fail_unless_eq` to `enforce_eq`), and adds `debug_assert` and `debug_assert_eq` for assertions that are active unless `--cfg ndebug`.

Closes #12049.

General points:
- you probably don't want to look at the "files changed" tab or the "Rename uses of ..." commits; the other individual commits will be more interesting.
- `debug_assert` etc. are never automatically removed, since not even `-O` sets `--cfg ndebug` (I did not add any use of them to the codebase, and am happy to remove the addition if people think we should work out a better arrangement)
- This is very easy to rebase (since the renaming is entirely automated), and so can wait until other manual harder-to-rebase patches land (in particular, I'm thinking of @pcwalton's vector patch).