Refactor to different structure

Hi,

Thank you very much for writing this project. I have found it very useful.

I am suggesting two changes in this pull request. One very small which introduces the 'initialDate' option however it is a little difficult as the users will have to put their date string values in quotes in order to allow the default to be `new Date()` without quotes.

The second change is very large. I am sorry that it is so large and I do not expect you to accept it but I found myself wanting to refactor the code to approach the problem in a different way. This means a lot of changes but something that is fairly similar at the end in many ways. It would be best to look at the final result rather than the diff.

I don't think it is good behaviour to do such large rewrites. I don't expect you to accept it but if you are interested in what I have done then I would be happy to talk about it.

Thanks again for writing the project,
Michael