Rewrite file.extract_hash
Rewrite file.extract_hash

This rewrite makes it possible for file.extract_hash to match on more
than just the filename being managed, also matching on the source URL as
well as a new user-specified name.

It also makes this function more efficient, as only a single pass is
performed when the hash_type is unspecified. Before, it would read the
entire file for each hash type.

Finally, it adds the ``source_hash_name`` argument to
``file.get_managed``, so that it can be passed to this function by
``file.managed`` states.

saltstack/salt,saltstack/salt,saltstack/salt,saltstack/salt,saltstack/salt