std.range.constraints & std.array code/import swap

The goal of this PR is to prevent import of  `std.array`, `std.functional` and `std.algorithm` through `std.range.constraints `.

1. clean imports in `std.array`
2. move some common code into `std.range.constraints`. The reason is optimisation of compilation time. 

Note:
1. `std.array` imports `std.functional` and `std.algorithm` in global scope. See `std.array.splitter`.
2. `std.range.constraints` is going to be common global import for half of phobos instead of `std.range`.

See also: #2700 #2661