Add support for structured array ufuncs

- Add New api method PyUFunc_RegisterLoopForStructType for creating new ufunc for structured array
- Add arg_dtypes array to PyUFunc_Loop1d object. This keeps track of each struct dtype that the ufunc can handle.
- Add arg_dtypes parameter to ufunc_loop_matches function so that struct dtypes can be compared for NPY_VOID type num
Add comments for new RegisterLoopForStructType API method
Fix build error
Code cleanup
Add test for struct array ufuncs
Add support for python 3