Fixes a compiler crash in case a private global is only reference from another global variable, for example:
```
private var g1 = 27
let g2 = UnsafePointer(&g1)
```
rdar://117189962
It makes sense to to this in a single pass, because there might be dead cycles for globals and functions, e.g. if a global references a function in its static initializer and the function references that global.
Another improvement: eliminate dead global-initializers. Before we had an explicit SIL representation of statically initialized globals, we had to keep them alive.
rdar://32956923