Allocation stack lowering based on escape analysis

Now that we can run libgo benchmarks:
https://codereview.appspot.com/103550047/
we can measure the effect of optimizations to see if they are worth adding
to the compiler.

This introduces an ssaopt package to hold SSA-level optimizations, to which
we add an allocation stack lowering pass based on a simple intraprocedural
escape analysis. In an experiment comparing libgo benchmark performance
before and after this change, this pass yielded a geo-mean 7.1% (5.5-8.7%
at a 95% confidence interval) improvement in performance.
I was doing some testing with this in a little test harness I started working on based on the one in go/pointer, and found that trivial cases of non-escapement were being missed. e.g.

```go
func(xx **int, yy *int) {
    xx = &yy
}
```

(&yy is being marked as escaping)

I've not finished investigating, but it looks like a bug in go/ssa. It seems that Referrers is returning instructions that don't exist in the function body anywhere.