Hide &.hook attr from required-property checker
Hide &.hook attr from required-property checker

The runtime.007 code is constantly testing our API out towards
007 itself. This is a good thing. In this case, as Val::Sub got
&.hook in 5939fb56ed7bda9b54f7f334a33ea3573ac6f48e, that new
attribute should also have been given a default.

Why? Because it's meant completely for the Perl 6 layer of things.
A hook is a way to stuff *Perl 6* code into built-ins. (Remember,
it replaces the previous Val::Sub::Builtin class.) And so, it
really shouldn't be visible at all to a 007 consumer wanting to
create a Sub object.

But it was, since it shows up as an attribute that Val::Sub has.
The straightforward way to fix this is to give &.hook a default,
because that triggers the following exception in the code:

    # If an attribute has an initializer, then we don't require that it be
    # passed, since it will get a sensible value anyway.
    next if $type-obj.^attributes.first({ .name.substr(2) eq $property }).build;

Meanwhile, we don't want this value to be truthy, because then it
would wrongly trigger code like this:

    if $c.hook -> &hook {
        return &hook(|@arguments) || Val::None.new;
    }

Which leaves `Callable` as the obvious default value. Problem solved.

masak/007,masak/007,masak/007