Add lint to improve floating-point expressions
Looks for floating-point expressions that can be expressed using built-in methods to improve accuracy, performance and/or succinctness.
changelog: Add lint `floating_point_improvements`.
Fixes #4726
Partly addresses [#2040](https://github.com/rust-lang/rust-clippy/issues/2040)
Currently linted expressions:
| Expression | Suggestion |
|---------------------------------|------------|
| x.log(2.0) | x.log2() |
| x.log(10.0) | x.log10() |
| x.log(std::f32::consts::E) | x.ln() |
| (1 + x).ln() | x.ln_1p() |
| (2.0).powf(x) | x.exp2() |
| (std::f32::consts::E).powf(x) | x.exp() |
| x.powf(1/2) | x.sqrt() |
| x.powf(1/3) | x.cbrt() |
| x.powf(y), where y is whole | x.powi(y) |
| x.exp() - 1 | x.exp_m1() |
|x * y + z|x.mul_add(y, z)|