Add error message for clients that lack a required crypto library.

TUF's crypto dependencies was recently changed: ED25519 signatures supported by default, and require PyCrypto or tuf[tools] to verify RSASSA-PSS signatures.
The error returned for clients that tried to verify rsassa-pss signatures without the required library was bad.  Error message returned now:

$ basic_client.py --repo http://localhost:8001
Error: No working mirror was found:
  localhost:8001: Metadata downloaded from the remote repository specified an RSA signature.  Verifying RSA signatures requires PyCrypto.
$ pip install PyCrypto, or pip install tuf[tools].
Merge pull request #197 from vladimir-v-diaz/develop

Add error message for clients that lack a required crypto library.
Update formats.py and repository_tool.py.

repository_tool.targets.delegate_hashed_bins():

Edit comments, add logging information, and rename 'max_number_of_bins' (now 'total_hash_prefixes') for clarity.
Fix expected value of 'number_of_bins' (power of 2 instead of multiple of 16.)
Remove the 'self' argument in get_filepaths_in_directory() (now a staticmethod.)

formats.py:
NUMBINS_SCHEMA may now start from 1 (allow the creation of 1 delegated hashed bin.)
Refactor test_replay_attack.py.

Refactored to use the 'unittest' module (test conditions in code, rather
than verifying text output), use pre-generated repository files, and
discontinue use of the old repository tools. Expanded comments.
Merge pull request #199 from vladimir-v-diaz/refactor_test_replay_attack

Refactor test_replay_attack.py
Refactor test_slow_retrieval_server.py.

Refactored to use the 'unittest' module (test conditions in code, rather
than verifying text output), use pre-generated repository files, and
discontinue use of the old repository tools. Expanded comments and modified
previous setup.

Minor edits to slow_retrieval_server.py.

Add missing else clauses (to detect when TUF fails to prevent an attack) for a couple of the integrations tests.
Merge pull request #200 from vladimir-v-diaz/refactor_test_slow_retrieval_attack

Refactor test_slow_retrieval_server.py.
Refactor test_mix_and_match_attack.py.

Refactored to use the 'unittest' module (test conditions in code, rather
than verifying text output), use pre-generated repository files, and
discontinue use of the old repository tools.  Modify the previous scenario
simulated for the mix-and-match attack.
Merge pull request #201 from vladimir-v-diaz/develop

Refactor test_mix_and_match_attack.py
Refactor test_extraneous_dependencies_attack.py.

Refactored to use the 'unittest' module (test conditions in code, rather
than verifying text output), use pre-generated repository files, and
discontinue use of the old repository tools.  Modify the previous scenario
simulated for the mix-and-match attack.  The metadata that specified the
dependencies of a project modified (previously a text file.)
Merge pull request #202 from vladimir-v-diaz/develop

Refactor test_extraneous_dependencies_attack.py.
Add test_repository_tool.py

Add 'test_repository_tool.py' (initial incomplete commit)
Add test cases for the top-level metadata objects (Root(), Targets(), etc.)
Add test case for Repository()
Add test case for get_target_hash()
Minor update to 'repository_tool.py': add default rolename for Targets() and call tuf.util.get_target_hash() in the
repository tool's get_target_hash()
Continue updating test_repository_tool.py.

Add test cases for the crypto funtions (e.g., generate_and_write_ed25519_keypair()).
Add test case for get_metadata_filenames().
Add test case for get_metadata_fileinfo().
Add setUpClass() and tearDownClass().
Update affected functions that failed testing, and any that needed modifying (such as util.py).
Continue updating test_repository_tool.py.

Add test cases for the generate_*_metadata() functions.
Finish remaining test cases for repository_tool.py functions.
Add test cases (skeleton) for remaining methods of test_repository_tool.py.
Update repository_tool.py.

Add remaining test cases for the methods of repository_tool.Metadata().
Add test case for repository_tool.Repository.get_filepaths_in_directory().
Update repository tool diagram.

Add missing 'repository_tool.Metadata.signatures' to the diagram.
Finish test cases for the methods of Targets().
[WIP] Add test case for repository.write().