Widget framework finally coming together, it mostly works now other than I'm not sure if dependencies are handled correctly and a couple edge cases that havent been considered