Handle different variables at the same stack offset

This can happen due to scoping:

void f() {
  {
    int a;
  }
  {
    int b; // probably has same address as a
  }
}

Fixing this requires tracking the live ranges for each variable.