[DDMD] Replace Scope's custom allocator with a normal function and clean up interface

The main motivation for this is so that DDMD can use the freelist without having to implement a custom allocator.  The only difference is invocation syntax, and `Scope` is only newed from a handful of places so it's not a big deal.

Reducing the number of lines is a nice side effect.

With this change DDMD can pass the phobos unittests on win32 - meaning even std.algorithm finally uses less than 2GB of memory!
The original code has a bug that I had wrongly introduced. Please review #3816 and merge it for 2.066 release.