newt upgrade: Fix Repo Commit Checkout

Checking out various repositories to a particular set of commit versions

is broken. Fix this by looking at the dependency graph's node's
required versions.

Example Usage in repository.yml

```
repo.versions:
    "0.0.0" : "master"
    "1.0.0" : "release_1_0_0"

repo.deps:
    apache-mynewt-core:
        type: git
        url: git@github.com:apache/mynewt-core.git
        vers:
            master: 0-dev
            release_1_0_0: 'f3d0ff2ab8db0da99f6b35938caf25c36950e181-commit'

    apache-mynewt-nimble:
        type: git
        url: git@github.com:apache/mynewt-nimble.git
        vers:
            master: 0-dev
            release_1_0_0: '7624744d90c159b8c9ab0bf3d890b0c3a3c43928-commit'
```

Note that the version specifier (such as `release_1_0_0`) can be a tag.
The project that houses this repository.yml gets checked out to
`release_1_0_0` and the dependencies get checked out to the versions
specified as shown above.

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
diff --git a/newt/install/install.go b/newt/install/install.go
index 9d25b27..b71a265 100644
--- a/newt/install/install.go
+++ b/newt/install/install.go
@@ -646,18 +646,29 @@
 		return nil, deprepo.ConflictError(conflicts)
 	}
 
-	// If project.yml specified any specific git commits, ensure we get them.
+	// Check all repo dependencies for specified git commits, ensure we get them.
+	rg := dg.Reverse()
 	for name, ver := range vm {
-		reqs := inst.reqs[name]
-		if len(reqs) > 0 {
-			keep, err := inst.shouldKeepCommit(name, reqs[0].Ver.Commit)
-			if err != nil {
-				return nil, err
+		for _, node := range rg[name] {
+			if len(node.VerReqs) > 0 {
+				for _, vreq := range node.VerReqs {
+					if vreq.Ver.Commit != "" {
+						keep, err := inst.shouldKeepCommit(name, vreq.Ver.Commit)
+						if err != nil {
+							return nil, err
+						}
+						if keep {
+							if ver.Commit == "" {
+								ver.Commit = vreq.Ver.Commit
+							} else {
+								return nil, util.FmtNewtError("repo %s: multiple commits %s and %s",
+									name, ver.Commit, vreq.Ver.Commit)
+							}
+						}
+						vm[name] = ver
+					}
+				}
 			}
-			if keep {
-				ver.Commit = reqs[0].Ver.Commit
-			}
-			vm[name] = ver
 		}
 	}