Fixes bug creating a new downloader before update

Previously #clear_download! was being called before updating the
attributes in Eff::Package, for both #save_file= and #version=. This
would cause a new downloader to be created with the old attributes, but
it appeared like everything was ok.

This commit fixes that bug and adds regression tests to guard against
this happening again.
Restructure spec directory
Adds the ability to compare SematicVersions

SemanticVersion now includes Comparable. Also tests! (Rediculous tests).
Adds verification to package and refactor Verifier

This flips the dependency between package and verifier. Verifier used to
have to know about the internal structure of a package. Verifier is very
simple and shouldn't change much. Now package has to know how to verify
itself.