New class Shift

Based on your previous comments, I fully agree a new concept is the way to go. 

I have refactored the code to include it. I also fixed the tests, it was actually a silly mistake (two suites with the same name)

Let me know what you think.