initial stab at category hierarchy implementation includes some recursive extension methods