Allow tz-aware inputs in Holiday.dates
closes #9825

Previously, passing tz-aware inputs to Holiday.dates would always result in an error because the the input start_date was converted in a way that destroyed timezone information.  This PR makes that conversion correctly preserve tz info, and converts several of the existing tests to run with both tz-aware and tz-naive inputs.

Noticed while working on a new trading calendar implementation here: https://github.com/quantopian/zipline/pull/556.

your tests don't check for a holiday with a timezone. wasn't this the use case?
 @jreback the specific issue solved here is that calling `holiday.dates(start, end)` with tz-aware `start` and `end` raises an error because `dates` attempts to construct a `DatetimeIndex` with a tz-naive start and the supplied end.  The fix here just propagates the timezone of the supplied start so that the call succeeds if both inputs are tz-aware and in the same timezone.  That's tested at https://github.com/pydata/pandas/pull/9824/files#diff-96b913a0de65ff4f70fc5bde0543e9a8R62 by running the same checks that were performed previously, but with dates that are localized to UTC.  The substantive content of the testing changes are in https://github.com/ssanderson/pandas/commit/8ae03df7bb06f536a669348d23fcf6d986fcf77d.  The rest of the diff is just refactoring to make it easier to run the same check twice, once with tz-naive inputs, and once with tz-aware inputs.
 @ssanderson ok, I see, then ok!

pls squash and good to go
 @jreback squashed into one commit and rebased with master.  I assume that's what you meant?
 @ssanderson yep

thanks for the PR!
 @jreback great!  https://github.com/pydata/pandas/issues/9825 can be closed (I mistyped in my issue description).
 fixed thanks!
