Refactor the ndarray adaptor and expose the array flags

This uses a cleaner pattern in the C implementation, instead of computing all pointers by hand.
Another possibility is to shift `(data, shape, strides)` at the end of structure (i.e. after `parent`). How do people access the "llarray"?