Fixed #272: Ignore appengine packages only available when built in appengine

Appengine has an appengine package (with sub-packages) that are only
available when build inside of appengine. They are in the same space
as standard library packages. Now Glide detects them and the resolver
handles them appropriately (skips) them. If the application is built
in appengine the package will be there just like a standard library
one.
diff --git a/dependency/resolver.go b/dependency/resolver.go
index 1668f23..8201589 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -413,7 +413,7 @@
 		// can locate.
 		for _, imp := range pkg.Imports {
 			pi := r.FindPkg(imp)
-			if pi.Loc != LocCgo && pi.Loc != LocGoroot {
+			if pi.Loc != LocCgo && pi.Loc != LocGoroot && pi.Loc != LocAppengine {
 				msg.Debug("Package %s imports %s", dep, imp)
 			}
 			switch pi.Loc {
@@ -713,6 +713,11 @@
 	LocGoroot
 	// LocCgo indicates that the package is a a CGO package
 	LocCgo
+	// LocAppengine indicates the package is part of the appengine SDK. It's a
+	// special build mode. https://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath
+	// Why does a Google product get a special case build mode with a local
+	// package?
+	LocAppengine
 )
 
 // PkgInfo represents metadata about a package found by the resolver.
@@ -793,10 +798,17 @@
 		}
 	}
 
-	// Finally, if this is "C", we're dealing with cgo
+	// If this is "C", we're dealing with cgo
 	if name == "C" {
 		info.Loc = LocCgo
 		r.findCache[name] = info
+	} else if name == "appengine" || strings.HasPrefix(name, "appengine/") {
+		// Appengine is a special case when it comes to Go builds. It is a local
+		// looking package only available within appengine. It's a special case
+		// where Google products are playing with each other.
+		// https://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath
+		info.Loc = LocAppengine
+		r.findCache[name] = info
 	}
 
 	return info
diff --git a/tree/tree.go b/tree/tree.go
index 0ba0d56..96c7d3e 100644
--- a/tree/tree.go
+++ b/tree/tree.go
@@ -143,9 +143,15 @@
 		}
 	}
 
-	// Finally, if this is "C", we're dealing with cgo
+	// If this is "C", we're dealing with cgo
 	if name == "C" {
 		info.Loc = dependency.LocCgo
+	} else if name == "appengine" || strings.HasPrefix(name, "appengine/") {
+		// Appengine is a special case when it comes to Go builds. It is a local
+		// looking package only available within appengine. It's a special case
+		// where Google products are playing with each other.
+		// https://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath
+		info.Loc = dependency.LocAppengine
 	}
 
 	return info