New Python iterator approach: vectorise without dtype

Have a look only at the last two commit, as this is a continuation of another PR.

To give it a spin:

    import erfa.nditer as erfa
    
    import numpy as np
    
    pnat = np.zeros([2,3], dtype=np.double)
    v = np.zeros([5,1,3], dtype=np.double)
    s = 1.0
    bm1 = np.sqrt(1.0-0.1**2)
    
    pnat[:,0] = 1.0
    v[:,:,1] = 0.01
    
    print(pnat)
    print(v)
    print(s)
    print(bm1)
    
    ppr = erfa.ab(pnat, v, s, bm1)
    
    print(ppr)

The only tricky part in the implementation is that `NpyIter` is not exposed in `numpy.pxd`. This requires the use of private `NpyIter_GetDataPtrArray()` from `numpy/arrayobject.h`. This implementation is inspired from https://github.com/rainwoodman/chealpy/blob/master/chealpy/npyiter.pxd

It could be further improved by including the output parameter `ppr` in the iterator itself. This would save indexation time, after the call to `eraAb`...
And to get `shape` and `ndim` from the broadcast object, i.e.,
```
broadcast = np.broadcast(pnat_in[...,0], v_in[...,0], s_in, bm1_in)
ppr_out = np.empty(broadcast.shape+(3,), dtype=np.double)
ndim = broadcast.nd
```