Stub in an NFA representation.

We'll keep it in the current form for construction; this is what we'll
feed to the executor and also serialize them as.
Sketch in some nqp:: ops for NFA handling.
Update bootstrap to get nqp::ops.
Implement various NFA ops.
Start using new NFA REPR and ops.

Avoids doing a lot of v-table calls while evaluating the NFA (can do a
bit more improvement yet also). This should also help ease NFA porting,
plus it's good to get this cleared up before porting things.
Add nqp::const mechanism.

Allows mapping constants in a backend-independent way.
Update bootstrap.
Lots of pir:: => nqp:: in NFA and Cursor.
NFA REPR serialize/deserialize.
Start !cursor_start refactor.

Currently it is the only thing in the NQP or Rakudo codebase that uses
Parrot's multiple return values feature. This splits it up into two
routines, one for things that really only want the cursor anyway (and
so this will be an efficiency win for them) and one for generated code
that wants all the things (which we can still do without allocating).
First batch of !cursor_start updates.
Update HLL::Grammar calls to !cursor_start.
Update call to !cursor_start in code-gen.

No measurable performane change.
Update bootstrap.
Kill !cursor_start, which used multiple return.
Kill dead code.