docs(unit testing): improve unit testing guide

This commit adds to the unit testing guide:

- add explicit section on additional libraries: Karma, Jasmine and
  angular-mocks and link to the docs for those projects too. Explain the
  benefit and use case for each of these libaries
- Add more fully featured test examples and add more documentation
  around them, in particular the controller test
- more clearly distinguish between the section on principles of testing
  and actual tutorial on writing a test

This should close #8220.


## Questions

One thing that I wasn't sure on was if to update the controller tests to not presume the controller is in the global scope. In the original issue (#8220) it says:

> I think we talked about the controller syntax in #5076. We agreed to change that for 2.0.

So I left the controllers as is, but it feels beneficial to me to update the controller example. Is there any reason why that can't be done now? That issue mentioned (#5076) is more about the `controllerAs` syntax, but the main problem with the test example right now is that the controllers are global. 

Secondly, the entire discussion about the different ways of dependency injection - most people will be familiar with how Angular does this and hence talking about other mechanisms doesn't seem that worthwhile?
put this on the same line as above, and including an empty dependent module array: `angular.module('app', [])...`