special: Reimplement Struve functions

The current Struve function implementations are from SPECFUN, and they work only for a restricted range of small `v`. The Cephes implementation is similar and does not appear to be very reliable.

This PR reimplements these functions in C, paying more attention to the convergence regions of the different expansions. Moreover, the power series is evaluated here in double-double precision, and a Bessel function expansion is added.

This seems to be enough to give reasonable results for Struve H and L in a large parameter regime.
The functions return `nan` if they determine that sufficient accuracy was not reached.

The new implementation is not perfect, but it is a big improvement over the present one. Browsing the literature didn't give immediate ready recipes for evaluating this function numerically, so improving this further would takes more time than I'm willing to invest now.

Some examples:
```
# BEFORE
>>> struve(0, 16.68) / mpmath.struveh(0, 16.68) - 1
mpf('7.0340915314659469e-9')
>>> struve(150, 106), mpmath.struveh(150, 106)
(-18680408435.606152, mpf('1.0291694296105514e-5'))
>>> modstruve(-150, 106), mpmath.struvel(-150, 106)
(-3.8270296070393437e+71, mpf('3423.1163055623661'))

# AFTER
>>> struve(0, 16.68) / mpmath.struveh(0, 16.68) - 1
mpf('-4.6629367034256575e-15')
>>> struve(150, 106), mpmath.struveh(150, 106)
(1.0291694296105773e-05, mpf('1.0291694296105514e-5'))
>>> modstruve(-150, 106), mpmath.struvel(-150, 106)
(3423.1163055626917, mpf('3423.1163055623661'))
```