Reduce the number of round trips for DistArray.from_localarrays

Now reduced to 0, 1, or 1 per engine. Depending on the arguments.

For 4 engines this reduces the number of roundtrips for `ones`, `zeros`, and `empty` to 8, or 2/engines.

For binaray functions (`add`, `multiply`, etc) this reduces roundtrips from 10 to 5. For unary functions (`sin`, `cos`, etc) it is reduced from 10 to 9.