ENH: Improve par-rec support

Goals:

* [x] Detect and correct mis-ordered acquisition (e.g., x, y, t, z).
* [x] Detect and return multiple echoes in dataset.
* [ ] Detect and optionally permit missing data (e.g., run too short, doesn't contain full dataset). Current support is partial, since differing scale-factors will not work with truncated recordings currently.
* [x] Add file overwrite checks and option to overwrite.
* [x] Correct output if there are multiple data types in same recording with different scale factors (phase contrast vs complex).
* [x] Output DTI b-values and vectors, if recorded.
* [x] Output dwell time.

Although it's not 100% complete, it would be good to get a round of review to make sure I'm not way off.
@matthew-brett, this was done to support writing data that had variable scale factors.

The `raw_data.dtype` is np.int16 for one of my datasets, which is not good. Does the Nifti format support writing other datatypes, like maybe np.float32? I tried outputting without casting (which means np.float64 after this math), and that definitely did not work. It would be nice not to have to use an integer format, especially for data like this that must be scaled before being saved.

The cleaner alternative here would be to save a multidimensional vector of scale factors, but from looking at the nifti code a bit it seems like it expects single scalars.

And from a bit of reading it seems like other dtypes are supported, but I'm not sure how to get it to work... seems like the header will have to be changed to "know" that the dtype is not np.int16...