Remove `[]` indexer for accessing sub-groups of hook collections.

We don’t ever need to access all `before` hooks (of all scopes),
all `after` hooks or all `around` hooks. The position and scope
always go together when accessing a set of hooks so it makes more
sense to make one method that takes both.
Rename `to_ary` to `all`.

`to_ary` is used for implicit coercion and we don’t want that here.
Delay instantiation of `HookCollection` until a hook is added.

This allows us to avoid the allocation for example groups that do not have hooks.