Rename _plotlyJSONEncoder -> PlotlyJSONEncoder.
Refactor PlotlyJSONEncoder. (see below)

Detiails:

- renamed *classy* names to *methody* names
- made methods `static`
- added docstrings to all the things
- removed some replication of code
- modified the `sage` import to be more explicit
- some reordering of the encoders (see TODO)
- let `json.JSONEncoder.default` throw `TypeError`
Move `default` function up. It should be seen 1st.
Docstring fix.
Add unit test for encode_as_plotly method.
Add unit test for `encode_as_list` method.
Add encode_as_pandas unit test.
Add unit test for encode_as_numpy.
Add unit test for datetimes.
Fix encoder for new test.
Add date encoder unit test.
Filter warnings so tests run clean :)
Update requirements to include pytz. (see below)

This is an *extremely* common module. I think 
including it shouldn’t be a problem.
Merge pull request #165 from plotly/json-encoder-tweaks

Json encoder tweaks
Merge branch 'master' into python3-bytes-decoding-fix
version bump -> 1.4.14 (bug fix for python3 json decoding)