tslibs TODO list
Misc:
- [ ] Timestamp.replace should support `fold` kwarg.  ATM the kwarg exists but is ignored.
- [x] Timestamp constructor should accept nanosecond kwarg (#18898) (closed by #19889)

Refactoring:
- [x] move ``_nat_strings`` and ``_checknull_with_nat`` to a single canonical location
- [x] put ``OutOfBoundsDatetimeError`` in a dependency-free util-like module. (#17805)
- [x] Possible redundancy between ``parse_datetime_string`` and ``parse_time_string`` <b>update</b> not redundant.
- [ ] De-privatize names in ``tslibs.parsing``
- [x] <s>cython [version](https://github.com/pandas-dev/pandas/pull/17363#discussion_r140664365) of compat for string_types, StringIO</s>
- [x] Don't import DateParseError in tslib
- [x] de-privatize nattype._checknull_with_nat (closed by #18443)

Check if these need to be exposed or (in some cases) need to exist:
- [x] `_Period._comparables` (closed by #18443)
- [x]  `Timedelta._validate_ops_compat`
- [x] `Timedelta._binary_op_method_timedeltalike`
- [x] `Timedelta._op_unary_method`
- [x] <s>`Timedelta._round`</s><b>update</b> Won't fix/correct-as-is
- [x] <s>`Timestamp._round`</s><b>update</b> Won't fix/correct-as-is
- [x] <s>`_Timestamp._get_field`</s><b>update</b> Won't fix/correct-as-is
- [x] `_Timestamp._get_named_field`
- [x] <s>`_Timestamp._get_start_end_field`</s><b>update</b> Won't fix/correct-as-is
- [x] `lib.arrmap` (closed by #18443)
- [x] `_libs.src.numpy_helper.infer_type`

TZ Conversion:
- [x] `tslib._localize_tso` appears to make a handful of unnecessary calls, see #17944
- [x] Is it the case that `tslib._localize_tso` argument obj will always have `obj.tzinfo == None`? This is the case in all existing usages.
- [x] Inconsistency between tz_convert and tz_convert_single #17734 

Offsets:
- [x] `normalize` attr should be relevant for `__eq__` #17689 (closed by #21404)
- [ ] update docstrings
- [ ]  Track down meaning behind [comment](https://github.com/pandas-dev/pandas/blob/master/pandas/tseries/offsets.py#L1919) `# I suspect this is wrong for *all* of them.` in `BQuarterBegin`. 

Timestamp Methods (moved from #17876)-
- [ ] Timestamp classmethods should return cls, not hard-coded Timestamp
- [ ] <s>... if and only if is_timestamp is updated to recognized subclasses.</s>
- [x] NaT / timedelta should behave like NaT / Timedelta #17955
- [x] <s>_assert_tzawareness_compat doesn't actually return the declared return type</s><b>update</b> but declaring it as void leads to build-time error because that mis-matches the `except? -1`
- [ ] #17906 implements `Timestamp.timestamp` as `round(self.value / 1e9, 6)` for consistency with `datetime` method.  Are we sure we want to drop nanosecond information?  Might it be better to update `utcfromtimestamp` for round-trip internal consistency?
- [ ] Timestamp.replace should handle freq #18544 
- [x] Timestamp.replace should handle DST gracefully #18319 (closed by #18618)

Follow-Up Cleanup:
- [ ] Fix camelCase [naming](https://github.com/pandas-dev/pandas/pull/17458#discussion_r140925121) in offsets
- [ ] docstrings for Timestamp.utcnow, utcfromtimestamp, fromtimestamp, combine
- [ ] ci/lint.sh stricter with pyx files
- [ ] simplify/correct NaT [docstrings](https://github.com/pandas-dev/pandas/pull/18014#discussion_r147565350) 
- [ ] de-privatize `_get_rule_month`
- [x] <s> Possibly remove `unique_deltas`, asv etc https://github.com/pandas-dev/pandas/pull/18034#discussion_r149657651 </s><b>update</b> unique_deltas _does_ appear to be more performant than the alternatives.
- [ ] add types, docstrings, de-privatize in some cases in tslibs.frequencies https://github.com/pandas-dev/pandas/pull/17746#discussion_r150272039, https://github.com/pandas-dev/pandas/pull/17746#discussion_r150321079
- [ ] docstring for tslibs.resolution.resolution
- [ ] consider renaming is_null_datetimelike --> checknull_datetimelike (https://github.com/pandas-dev/pandas/pull/18357#discussion_r151867565)
- [x] check for unit already PANDAS_FR_ns in conversion.ensure_datetime64ns
- [ ] Remove `#noqa`d unused imports

Decision Making
- [ ] Have `NaT` [not subclass](https://github.com/pandas-dev/pandas/pull/17793#issuecomment-338479475) `datetime`?
- [ ] Wrap `datetime.date` with `Timestamp`?  Or possible treat it as `Period(..., freq="D")`? #17965
- [ ] Make Resolution singleton or use instance or [...].  See #18034.
- [ ] Consider making Timestamp.replace raise instead of returning an imaginary time (https://github.com/pandas-dev/pandas/pull/18618#issuecomment-352285892)

Issues:
- [x] check if #17037 is handled by #17640 <b>Update</b> It is not.

Questions:
- [ ] Shouldn't `pd.Period('2017').day` be `None` instead of 31?

Unsorted
- [x] Build warnings for timedeltastruct https://github.com/pandas-dev/pandas/pull/18357#issuecomment-346496628 (closed by #18443)
- [ ] Ween off of dateutil internals, specifically import of _timelex in tslibs.parsing.
- [ ] Period tests for `__sub__` with datetimelike https://github.com/pandas-dev/pandas/pull/18524#discussion_r153465607
- [ ] Fix missing `tz` arg in #18471.
- [ ] Make sure we aren't comparing `tzinfo1 == tzinfo2` as that may be misleading for pytz
- [ ] investigate why an "extra layer" is needed in np_datetime.cstring_to_dts
- [ ] docstrings for np_datetime._string_to_dts, cstring_to_dts
- [ ] de-privatize frequencies._MONTH_NUMBERS etc, mismatch _MONTHS vs MONTHS

Low Priority:
- [ ]  Set `seen_datetime` consistently in array_to_datetime #18554 