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?
> The duplication is now gone, and encapsulated within the `beforeEach`

This reads weirdly to me. Consider something like "We moved duplicate behavior into the `beforeEach` block" instead.