Issue title: Can `Resolve.Fixed` be removed?
 Issue body: `Resolve.Fixed` is a struct that is used for packages where a fixed version is required. However, why cannot I treat that as a normal dependency with a `VersionSpec` containing one valid version, e.g.

```
julia> Pkg.Types.VersionSpec(v"1.2.3")
VersionSpec("1.2.3")
```

Does `Fixed` have any specific semantics when it comes to the resolver? cc @carlobaldassi 
 Comments: 
 Comment 0: I think that the only real difference from the point of view of the resolver is in the logging and error messages. In the initial stages of solving, they are used to simplify the graph right away (all their requirements are propagated etc.). A package with a single allowed version would be pruned anyway, [with this log message though](https://github.com/JuliaLang/Pkg.jl/blob/827a740800d047074046f89835e903cc49ba31e2/src/Resolve/graphtype.jl#L744).

A small complication is that juiia itself is treated as a fixed package, so using it to simplify the graph right away might affect the performance significantly perhaps? I think it's hard to tell without trying. Then if we remove the special treatment of fixed packages but keep it for Julia, we might not have gained much I guess. 
 Comment 1: But perhaps we could still do that optimization by running it on all packages with a `VersionSpec` that is dynamically checked to only a version while still being able to simplify the code (by removing the Fixed struct). 
 Comment 2: I think that's what we do already, basically, see [here](https://github.com/JuliaLang/Pkg.jl/blob/827a740800d047074046f89835e903cc49ba31e2/src/Resolve/graphtype.jl#L1351-L1354) and then [here](https://github.com/JuliaLang/Pkg.jl/blob/827a740800d047074046f89835e903cc49ba31e2/src/Resolve/graphtype.jl#L1351-L1354).

In fact, upon looking again at the code, I'm not sure the performance issue is actually relevant.

The log issue might be addressed, but we would still need to pass the information about which packages were fixed to the graph constructor. The packages uuids would probably suffice though.

It might make sense to begin with to try passing no `Fixed` packages to the resolver, and only single-version requirements, and then take it from there,
 Comment 3: > I think that's what we do already, basically, see [here](https://github.com/JuliaLang/Pkg.jl/blob/827a740800d047074046f89835e903cc49ba31e2/src/Resolve/graphtype.jl#L1351-L1354) and then [here](https://github.com/JuliaLang/Pkg.jl/blob/827a740800d047074046f89835e903cc49ba31e2/src/Resolve/graphtype.jl#L1351-L1354).

I think those are the same link twice.

> It might make sense to begin with to try passing no Fixed packages to the resolver, and only single-version requirements, and then take it from there,

I'll try it out. 



 Comment 4: @carlobaldassi Does it ever make sense for a package to be both "fixed" and "required"? Or does fixed imply required?
 Comment 5: I think fixed implies required. A fixed package is removed from the graph right away and it's not involved in the resolver's process. So it shouldn't even be possible to require it, I guess. A required package in general has a range of versions allowed, but it's still removed from the graph if in practice it turns out that only one version is possible.
{'source': 'GithubIssues', 'repo_name_with_owner': 'JuliaLang/Pkg.jl', 'issue_id': 728834839, 'repo_stars': 452.0}