Wrap before and after each hooks with around hooks

Around hooks should really wrap before each hooks and after each hooks.
This is just how RSpec decided to do.
Fine-grain hook types for readability

The `Hook` type is confusing as it seems to imply that it is a super
type of `AroundHook`. To disambiguate it, they are fine-grained into
BeforeEach and AfterEach.
Publish code under the MIT license