Refactor code
Stack traces: Align the text of "unknown frames"

Where we previously had

   2: crashSelf (at my/PrimPSF.hs:31:46-31:47)
      crashSelf (at my/PrimPSF.hs:31:42-31:43)
     ... 1 unknown frames ...
   4: crashSelf (at my/PrimPSF.hs:31:46-31:47)
      crashSelf (at my/PrimPSF.hs:31:42-31:43)
     ... 1 unknown frames ...

We now have

   2: crashSelf (at my/PrimPSF.hs:31:46-31:47)
      crashSelf (at my/PrimPSF.hs:31:42-31:43)
   -- ... 1 unknown frames ...
   4: crashSelf (at my/PrimPSF.hs:31:46-31:47)
      crashSelf (at my/PrimPSF.hs:31:42-31:43)
   -- ... 1 unknown frames ...
First implementation of pushStackFrame# primitive

We implement pushStackFrame# for users of stack traces. Normally
the stack traces based on the execution stack will miss a lot of
stack frames due to tail calling. So we create a function called
`pushStackFrame#` which is exactly like `id`, only that it also pushes
a stack frame on the stack. This stack frame will remember what it was
asked to evaluate, so when we later reify the stack, we can use that
value.

For example, the stack trace for crashes on the following Haskell
function will not mention the function crashSelf at all.

    crashSelf :: Int -> Int
    crashSelf 0 = 1 `div` 0
    crashSelf x = crashSelf (x - 1) -- Our beloved tail calling!

But if the programmer suspects `crashSelf` to be the culprit, the
programmer can try to change it's definition to:

    crashSelf :: Int -> Int
    crashSelf 0 = 1 `div` 0
    crashSelf x = pushStackFrame# (crashSelf (x - 1))

And then rerun the program, this time the stack trace will contain
the function `crashSelf`. This is exactly how pushStackFrame# is
intendend to be used.