(#22363) Make hash lookup agnostic for nil/undef lookup

A hash lookup now interprets nil and undef as the same value when
doing a lookup.
(#22363) Add test to assert that hash lookup miss == undef
(#22363) Add label.plural support to LabelProvider

This makes it easier to add plural s in error messages.
(#22363) Improve label provider

There were labels missing for Booleans, and when given a class.
Also changes labels of all types to nnn-Type as that read better in
error messages; e.g. Integer-Type, String-Type.
(#22363) Improve error messages from [] operator

There were several cases where errors in arity and type incompatible
in the given keys produced generic error messages, messages without
location, and in a few cases with errors while formatting the error
message.

Test examples added.