Generate TypeInfo objects as in template instances

`TypeInfo`s and template instances are very similar, they are "generated" when the type is used ≒ the template is instantiated. And they are placed in COMDAT section to allow objcode duplication from each compilations.

From 2.064, dmd has supported strict instantiation algorithm (#2550) to reduce executable size. I think we should modify `TypeInfo` generation algorithm to follow it.

From Walter's suggestion (https://github.com/D-Programming-Language/dmd/pull/2480#issuecomment-54687757), this PR still supports old sloppy TypeInfo generation algorithm by `-allinst` switch. 

This PR is based on #3948.