Remove -Z no-opt flag, allow --opt-level override, and add -O<n> flag

Remove the `-Z no-opt` flag from rustc, fix #13649.

Also fix #7493 and in the process add `-O<n>` flag in the same vein as gcc, clang, and ghc.

The additional flag `-O<n>` flag may not be desired, but doing it this way unifies the two optimisation flags and results in clearer code.

Backwards compatibility is kept as the `-O` flag still defaults to optimisation level 2. However this only works when no other `-O<n>` or `--opt-level` arguments are passed to rustc (is this bad?).