Invalid date checks

Firstly, this is a very useful library! I ran into an issue where I incorrectly parsed a date and passed it into `between()`, which caused an infinite loop since it treated the date similar to `undefined`. While we may expect the iterator to be called indefinitely (until we return a falsy result) when we provide a falsy end date, it's likely an error on our part if we pass in an `Invalid Date`. I've added a check in `init()` to fail on that along with some tests. I also added two small methods for checking if an object is a date and whether it's valid.