FFT2n.h: rewrite butterfly CT & GS
FFT2n.h: rewrite butterfly CT & GS

1. Butterfly CT

1.1. single-layer butterfly

For each pair `(P, Q) = (buf[i], buf[i + m]` for `step = 2 * m`

```
      coef r1 = W[start * n / (2 * m)]
      P = P + r1 * Q
      Q = P - r1 * Q
```

1.2. 2-layer butterfly

For each quadruple `(P, Q, R, S) = (buf[i], buf[i + m], buf[i + 2 * m],
buf[i + 3 * m])`

First layer: butterfly on `(P, Q)` and` (R, S)` for `step = 2 * m`

```
      coef r1 = W[start * n / (2 * m)]
      P = P + r1 * Q
      Q = P - r1 * Q
      R = R + r1 * S
      S = R - r1 * S
```

Second layer: butterfly on `(P, R)` and `(Q, S)` for `step = 4 * m`

```
      coef r2 = W[start * n / (4 * m)]
      coef r3 = W[(start + m) * n / (4 * m)]
      P = P + r2 * R
      R = P - r2 * R
      Q = Q + r3 * S
      S = Q - r3 * S
```

2. Butterfly GS

2.1. single-layer butterfly

For each pair `(P, Q) = (buf[i], buf[i + m]` for `step = 2 * m`

```
      coef r = inv_W[start * n / (2 * m)]
      P = P + Q
      Q = r * (P - Q)
```

vrancurel/ntl,vrancurel/ntl,vrancurel/ntl