refactor - reduce CTFE memory consumption pt 1

Currently, CTFE allocates memory for every step in its computation. This can result in an enormous amount allocated. This is the first step towards using stack memory instead.
If `s` has a destructor, it will be called when s leave its scope. If `b`'s scope is larger then `s` scope,  `b` will be invalid when `s.__dtor` will be called. Of course, if we have a rule that DMD's classes shouldn't have destructors, this issue is not actual.