feat: smarter verification
Motivation
There is no need in requiring contract name/path in forge verify-contract. For example, hardhat does not require that.
Solution
This PR introduces smarter way of identifying contracts by deployed code which respects immutable/link references and targets exact bytecode match (ContractsByArtifact::find_by_deployed_code_exact). I believe this could be useful for stuff unrelated to verification as current diff score method is not really great.
Also, this PR makes contract: ContractInfo parameter on VerifyArgs optional, thus allowing to do just forge verify-contract <address>. The artifact to use is determined by matching local bytecode through find_by_deployed_code_exact.
I've also changed flow to not rely on cache (except for determining version by looking at recent artifacts). We now trigger compiler directly if we need to get cached abi or metadata and it just uses cache if it's available instead of throwing a error when run on a project without cache.
In combination with --guess-constructor-args it now allows users to verify deployments of arbitrary project contracts much easier by just doing forge verify-contract <address> --guess-constructor-args
Next steps could probably be identifying libraries used when linking contract automatically as well.