lib/n/builtins/mask: bit mask type over enums

A (Mask Enum) is implemented like a integer bitmap, as in common in C.
With some important differences.

- This is orthogonal to the enum itself; which still takes values
  from 1 (or 0 if `Trivial_ctor).
- A Mask is strongly typed and cannot contain invalid values (e.g. ~x is
  a valid bitmask, whereas in C, unless the enum size is equal to the
  bitwidth, ~x will contain extra bits set to 1).
- Standard set operations are defined, reducing the risk of user error.

This is similar to EnumSet in Java.
t00/vararg: renamed from t00/optional
lib/n/builtins: remove Optional and Optional_ref functions

We've had 'else' binary operator for that purpose for a while.
lib/n/builtins: introduce Optional type
bootstrap: preparing for optional values: rename NUL to NIL, null to nil
bootstrap:lexer: smarten un/bin operator space-based decision logic
bootstrap:lexer: support for pre-unary ?
bootstrap:autointf: `Inherit support

`Inherit is used to support a conditional 'isa' declaration, typically
depending on the isalist of a generic argument. This is a bit of a
tentative feature. It will be used by Optional in the upcoming commit.
For this limited use-case, we could have special handling in autointf
for Optional.

To be really interesting, we would need support for conditional member
declaration: "if t isa `Copyable, then define Slicebuf met Push"...
bootstrap:nodes: remove node_kind FUTURE

We are limited to 64 node kinds. It's not clear an eventual support for
futures would actually require its own node kind. And we're not certain
this will be a primitive anyway.
bootstrap: support for optional values