Minimized and explicit imports in std.algorithm

I'm investigating semi-automated ways to minimize dependencies, and worked on std.algorithm by hand. I was unable to figure what's needed from std.range. For the others, I either pushed them down into unittests or made the symbols explicit.

One simple advice for Effective D would be:

"Avoid using `version(unittest) import xxx;`. Instead, use `import xxx;` inside every unittest that needs it."