Add same-length cross-type conversion

- Add constructor to "complex_it" that takes another of the same class
  template, with a different component type but the same length.
- Do the same for "complex_rt" (both cases).
Add barrage (or pair thereof) conversion.

- Add constructor to "complex_rt" (recursive case) that takes one or
  two barrage values.  The two barrages don't require identical
  component types, nor do either have to match the receiving object's
  component type.
- Do the same for "complex_it," excluding cases where the receiving
  object's rank is zero.
Add sub-barrage (or list thereof) conversion.

- Add constructor to "complex_rt" (recursive case) that takes one or
  more sub-barrage values.  The sub-barrages don't require identical
  component types (nor do they have to match the destination component
  type.)
- Do the implementation of the above twice, since the first one causes
  an internal compiler error.  That first implementation is still
  there, blocked by the preprocessor, for further experimentation.
- Do the same for "complex_it," merging the barrage and same-length
  constructors together with this one.  (If the destination has rank
  X, then the constructor can take one object of rank X, one or two of
  rank X - 1, etc. (i.e. one through 2^Y of rank X - Y).
- Add header comments to unit tests that are missing them.
- Amend some comments to indicate if their owning constructor can act
  as a conversion.