Use more robust signature detection heuristic

Instead of duck typing based on the `value` specified, inspect the
target element's tag name.
Re-organize source files
Create dedicated module for date formatters
Add tests for synchronous API