Finds all members of a symbol that have a specific annotation, directly or indirectly. It returns a tuple of the name of each each member that has them annotation.
Checks if a symbol has a specified attribute. If the attribute cannot be found, it checks for attributes on the original attribute type itself. It will keep doing this until it cannot found anymore attributes.