Improved template method UML.

This commit fixes the following problems:
- protected methods marked as public.
- inherited operations that are not overriden are repeated.
- one method had an invalid parameter (see attached image).
- abstract class not indicated as such.

This commit improves the following aspects:
- I did not like how the classes were arranged, so went ahead and made
  some small chnges. I hope you don't mind the different distribution.

![template-method-old-bug](https://cloud.githubusercontent.com/assets/8271090/4687673/41a1a2c0-565a-11e4-8983-e44ef863babf.jpg)