- removed @required from protocols
- renamed abstractions to concrete because they can be used without subclassing as well
- added more docs