IR refactoring and test cases

- refactoring IR code generation, make sure not to generated invalid source code.
- IR basically leave JS source code as it is and just pass it to JSEvaluateScript when it encounters unknown/complex node.
- add IR unit test cases