cmd/compile: use a map to track liveness variable indices
It is not safe to modify Node.Opt in the backend.
Instead of using Node.Opt to store liveness variable indices, use a map.
This simplifies the code and makes it much more clearly race-free.
There are generally few such variables, so the maps are not a significant
source of allocations; this also remove some allocations from putting
int32s into interfaces.
Because map lookups are more expensive than interface value extraction,
reorder valueEffects to do the map lookup last.
The only remaining use of Node.Opt is now in esc.go.