Fixes #139: when glide.yaml file being rewritten the imports are being reordered

This happened because the imports were converted into a map and then back into
a slice. Don't do that.

The imports shouldn't be sorted by alpha. A user should be able to sort in
the glide.yaml file.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b4ac772..a2acd25 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# Release 0.7.2 (2015-11-XX)
+
+- Fixed #139: glide.yaml file imports being reordered when file written.
+
 # Release 0.7.1 (2015-11-10)
 
 - Fixed #136: Fixed infinite recursion in list and tree commands.
diff --git a/cmd/flatten.go b/cmd/flatten.go
index abb3ce8..e9bdcaa 100644
--- a/cmd/flatten.go
+++ b/cmd/flatten.go
@@ -58,9 +58,12 @@
 	err := recFlatten(f, force, home, cache, cacheGopath, skipGopath)
 	flattenSetRefs(f)
 	Info("Project relies on %d dependencies.", len(deps))
-	exportFlattenedDeps(conf, deps)
 
-	return conf, err
+	// A shallow copy should be all that's needed.
+	confcopy := conf.Clone()
+	exportFlattenedDeps(confcopy, deps)
+
+	return confcopy, err
 }
 
 func exportFlattenedDeps(conf *yaml.Config, in map[string]*yaml.Dependency) {
diff --git a/glide.go b/glide.go
index 9e7ad57..565a80a 100644
--- a/glide.go
+++ b/glide.go
@@ -546,7 +546,7 @@
 		Using("cacheGopath").From("cxt:cacheGopath").
 		Using("skipGopath").From("cxt:skipGopath").
 		Does(cmd.VendoredCleanUp, "_").
-		Using("conf").From("cxt:cfg").
+		Using("conf").From("cxt:flattened").
 		Using("update").From("cxt:updateVendoredDeps").
 		Does(cmd.WriteYaml, "out").
 		Using("conf").From("cxt:cfg").
diff --git a/yaml/yaml.go b/yaml/yaml.go
index bbfbd42..fcdfe41 100644
--- a/yaml/yaml.go
+++ b/yaml/yaml.go
@@ -108,6 +108,15 @@
 	return c
 }
 
+// Clone performs a deep clone of the Config instance
+func (c *Config) Clone() *Config {
+	n := &Config{}
+	n.Name = c.Name
+	n.Imports = c.Imports.Clone()
+	n.DevImports = c.DevImports.Clone()
+	return n
+}
+
 // Dependencies is a collection of Dependency
 type Dependencies []*Dependency
 
@@ -158,6 +167,20 @@
 	return vcs.NewRepo(remote, dest)
 }
 
+func (d *Dependency) Clone() *Dependency {
+	return &Dependency{
+		Name:             d.Name,
+		Reference:        d.Reference,
+		Pin:              d.Pin,
+		Repository:       d.Repository,
+		VcsType:          d.VcsType,
+		Subpackages:      d.Subpackages,
+		Arch:             d.Arch,
+		Os:               d.Os,
+		UpdateAsVendored: d.UpdateAsVendored,
+	}
+}
+
 // Get a dependency by name
 func (d Dependencies) Get(name string) *Dependency {
 	for _, dep := range d {
@@ -168,6 +191,14 @@
 	return nil
 }
 
+func (d Dependencies) Clone() Dependencies {
+	n := make(Dependencies, 0, 1)
+	for _, v := range d {
+		n = append(n, v.Clone())
+	}
+	return n
+}
+
 // DeDupe cleans up duplicates on a list of dependencies.
 func (d Dependencies) DeDupe() (Dependencies, error) {
 	checked := map[string]*Dependency{}