Avoid invalid *&ex -> ex optimizations.

This is a back-port of D-Programming-Language/dmd#3662
(commit 4da4da1), and fixes compilation of:
---
struct Foo { char[1] bar; }
bool checkBar(Foo* foo) { return true && *foo.bar.ptr; }
---
Merge pull request #649 from klickverbot/backport-dmd-3662

Avoid invalid *&ex -> ex optimizations.
Add changes from D-Programming-Language/dmd#3685
Latest druntime changes
Merge pull request #650 from Trass3r/dmdpr3685

Add changes from D-Programming-Language/dmd#3685
Make function entry basic blocks unnamed.

The performance impact should be completely immeasurable,
but the main benefit is that this makes IR dumps slightly
nicer to look at (as the redundant "empty:" labels are
now omitted entirely).
Merge pull request #653 from klickverbot/unnamed-entry-bb

Make function entry basic blocks unnamed.
Remove unused 'seenTemplateInstances' mechanism.
Use --gc-sections on Linux.

This was painful.