Marshal now gets the map via the AllSettings method

Conflicts:
	viper.go
diff --git a/viper.go b/viper.go
index d9f97c8..be41206 100644
--- a/viper.go
+++ b/viper.go
@@ -350,19 +350,8 @@
 // Marshals the config into a Struct
 func Marshal(rawVal interface{}) error { return v.Marshal(rawVal) }
 func (v *Viper) Marshal(rawVal interface{}) error {
-	err := mapstructure.Decode(v.defaults, rawVal)
-	if err != nil {
-		return err
-	}
-	err = mapstructure.Decode(v.config, rawVal)
-	if err != nil {
-		return err
-	}
-	err = mapstructure.Decode(v.override, rawVal)
-	if err != nil {
-		return err
-	}
-	err = mapstructure.Decode(v.kvstore, rawVal)
+	err := mapstructure.WeakDecode(v.AllSettings(), rawVal)
+
 	if err != nil {
 		return err
 	}