Reimplemented type-handling + some other fixes

- Reimplemented type-handling
- Added `not found a valid 'main' function declaration` error message
- Added `-time` command-line switch
- Added new bytecode peephole optimizations:
1) `mov(reg1, reg2)`
`mov(reg2, reg1)`
is changed to:
`mov(reg1, reg2)`

2) small optimization for unused/unusable `mov`s

- `self` is the default namespace's name