Added support for dates
Refactored to improve accurary when calculating months and years
Refactored to SmartPeriod