AngularJS: Novice to Ninja: Elegant, Powerful, Testable, Extendable