Change code gen for case statements to enable TCO

Instead of 

```
return (function(a, b, c) {
  // cases ...
})(foo, bar, baz);
```

this generates

```
return (function() {
  var a = foo;
  var b = bar;
  var c = baz;
  // cases ...
})();
```

This enables the inliner which in turns allows TCO to run.