Manage duplicated transitive dependencies

There are two improvements here, maybe quite controversial though:

- [x] Do not install duplicated dependencies. So if you have this gopack.config:

```toml
[deps.foo]
  import = "github.com/calavera/foo"
  commit = "asdf"

[deps.bar]
  import = "github.com/calavera/bar"
``` 

but the dependency bar has this gopack.config:

```toml
[deps.foo]
  import = "github.com/calavera/foo"
  branch = "qwert"
```

Gopack will fail because the checkout specs are incompatible. It won't try to find out if a commit is into a branch or anything similar because there are too many corner cases for each version control system. I rather fail fast and inform the user.

- [x] Use semantic versioning to compare dependency tags. So if you have this gopack.config:

```toml
[deps.foo]
  import = "github.com/calavera/foo"
  tag = "v1.1.1"

[deps.bar]
  import = "github.com/calavera/bar"
``` 

but the dependency bar has this gopack.config:

```toml
[deps.foo]
  import = "github.com/calavera/foo"
  tag = "v1.2.1"
```

Gopack will fail because those versions are not semantically compatible.

/cc @d2fn