Add more optional config, i.e. suffix_list_file

Addresses #38 and some other concerns I've had.

The changes in API and behavior pertain to the TLDExtract
class. In all cases the intention is to make the behavior
of the generated function more configurable.

Summary of changes:

* Add `suffix_list_file` kwarg. Allows you to specify
the location of the Public Suffix List, or anything like
this file. This is expected to be a UTF-8 encoded text file.
This allows you to control exactly what revision of the file
you want to use, or to use an arbitrary file. This kwarg
is incompatible with `fetch=True`, and an exception will be
raised if you do not explicitly say `fetch=False`.
* Add `cache_enabled` kwarg. Defaults to `True`. If disabled,
reading and writing to the `cache_file` is completely disabled.
This should be helpful for testing and debugging.
* Add `fallback_to_snapshot` kwarg. Defaults to `True`.
If disabled, it will NOT use the distributed snapshot
of the PSL when `tlds` is empty.

Also of note: some minor refactoring of helper functions at the
bottom of the file, to accomodate changes while keeping code DRY.

All tests in suite pass.