Fix assertion error when building Phobos with debug builds.

Turns out that Expression::isConst() actually is much too
pessemistic as it e.g. never regards struct literals as
const.

We should get this fixed to avoid unnecessary heap
allocations for array initialization.
Merge pull request #503 from klickverbot/const-array

Fix assertion error when building Phobos with debug builds.
Mention TypeInfo emission in debug log.
Fix IrType::isVector (so far unused anyway).
Remove superfluous Dsymbol::codegen overload.
Don't log the uninteresting case of DtoConstExpInit.
Use Module::members -> Dsymbol::codegen to define symbols.

This commit fundamentally changes the way symbol emission in
LDC works: Previously, whenever a declaration was used in some
way, the compiler would check whether it actually needs to be
defined in the currently processed module, based only on the
symbol itself. This lack of contextual information proved to
be a major problem in correctly handling emission of templates
(see e.g. #454).

Now, the DtoResolve…() family of functions and similar only
ever declare the symbols, and definition is handled by doing
a single pass over Module::members for the root module. This
is the same strategy that DMD uses as well, which should
also reduce the maintainance burden down the road (which is
important as during the last few releases, there was pretty
much always a symbol emission related problem slowing us
down).

Our old approach might have been a bit better tuned w.r.t.
avoiding emission of unneeded template instances, but 2.064
will bring improvements here (DMD: FuncDeclaration::toObjFile).
Barring such issues, the change shoud also marginally improve
compile times because of declarations no longer being emitted
when they are not needed.

In the future, we should also consider refactoring the code
so that it no longer directly accesses Dsymbol::ir but uses
wrapper functions that ensure that the appropriate
DtoResolve…() function has been called.

GitHub: Fixes #454.
Handle typeof(null) -> Object conversion.

Not sure why this wasn't triggered by the test suite before.
More robust way of handling static array single element initialization.

Fixes a std.traits test where there would be a mismatch
in const/shared qualifiers on the element type of a dynamic
array initializer.
Prefer more specific functions to DtoResolveDsymbol.

The remaining ones should also be easy to remove with a
closer look at the situation.

Ideally, we would get rid of all of them at some point and
use safe wrapper functions for accessing the IrDsymbol
associated with a given declaration (which would emit the
declarations on the fly if not already present).
Handle void[0] struct/class members.

This was also broken before the symbol emission
changes; we just accidentally managed to avoid
the only occurence in the standard library tests.
Remove unused DMD IRState implementations.
Remove unused, empty Ir type.

The codegen parameter was changed to IRState instead of
removing it to set the stage for an eventual eradication
of the gIR global.
Use IRState parameter instead of gIR where available.
Display -mcpu/-mattr help even with no source files given.

Unfortunately, we can't easily add a test for this in our
current test runner setup (i.e. dmd-testsuite).

GitHub: Fixes #505.
Remove Walter-ism that doesn't even work in release mode.
Bring back -disable-fp-elim.

It was moved to llvm/CodeGen/CommandLineFlags.h.

GitHub: Fixes #502.
Implement pragma(lib) using module metadata.

Since LLVM 3.3 pragma(lib) can be implemented like DMD does.
Merge pull request #507 from klickverbot/issue-454

Use Module::members -> Dsymbol::codegen to define symbols.
Merge pull request #509 from klickverbot/fix-disable-fp-elim

Bring back -disable-fp-elim.