Fixed bug in saveable_attributes where hooks weren't being called

# Why?

`saveable_attributes` was only looking at the class directly for hooks. Hooks are set in an array on the class. So, if you look in the `arkenstone_hooks` array on a subclass, you won't see any hooks on that were defined on the parent class.

# What Changed?
I added `has_hooks?` to the `Hook` class. It will walk the inheritance chain (if appropriate) to see if the supplied class, or its ancestors has any hooks defined.