Add support for Asides to OpaqueKeys

@doctoryes: This means that this class doesn't have a `__dict__`, and thus doesn't have any dynamic attributes, as long as the the parent also defines `__slots__`. If a child doesn't define `__slots__`, then that child will have a `__dict__` and accept arbitrary attributes again.

I did it for these key base classes to allow for the subclasses to do it if they want to. Basically, keeping the key infrastructure as light as possible.