Design of base components + Clock

* Code improvement
* Clock implementation
* Tests
* License headers
It's not possible to use unbecome because it does not use a stack by default, it replaces the previous code at each call. It's more efficient in our case to leave this default behavior because we don't want to pop all states when all clocks are stopped.