- Cached the secant and tangent numbers (first 1000 terms).
- Cached the secant and tangent numbers (first 1000 terms).

This makes `faulhaber_sum(n, k)`, `bernoulli_polynomial(n, x)` and `euler_polynomial(n, x)` much faster when the same value of `n` (n <= 1000) is used multiple times.

- Simplified the `euler_number(n)` function to use only the secant numbers.

trizen/sidef,trizen/sidef,trizen/sidef,trizen/sidef