Make VM crashes useful

- Urges the user to report the bug
- Gives the user the interpreted code stack trace
- Gives the program counter at the error
- Gives the bytecode for the error
- Provides the VM stack trace, as before
- Gives the current state of the registers

Note: The diff is messed up, [go here](https://github.com/Araq/Nimrod/pull/1253/files?w=1) for a concise version or append `?w=1` to the diff page.

Sample message:

```
|==============================|
|Internal virtual machine error|
|   This is a bug, report it!  |
|==============================|
Program stack trace:
stdin(2)
================================
Program counter is 8
Opcode context is 
[80050093, 80000191, 00010012, 80010291, 80050593, 00050310, 80050193, 0001000A, 80020191, 01000624, 80050193, 0001000A, 00060422, 0302007D, 00000000, ]
Current registers: [(0, rkFloat, 1.0000000000000000e+00), (1, rkNode, 1.0000000000000000e+00), (2, rkNode, +=), (3, rkNodeAddr, ->1.0000000000000000e+00), (4, rkNone, nil), (5, rkNode, 1.0000000000000000e+00), (6, rkNone, nil), ]
================================
         VM Stack Trace         
Traceback (most recent call last)
nimrod.nim(91)           nimrod
nimrod.nim(55)           handleCmdLine
main.nim(421)            mainCommand
main.nim(153)            commandInteractive
passes.nim(193)          processModule
passes.nim(137)          processTopLevelStmt
vm.nim(1356)             myProcess
vm.nim(1322)             evalStmt
vm.nim(1314)             execute
vm.nim(964)              rawExecute
vm.nim(219)              putIntoReg
system.nim(2021)         FieldDiscriminantCheck
Error: unhandled exception: assignment to discriminant changes object branch [EInvalidField]
```