Bugfix for Nested Key Casing

This patch fixes a bug with how Viper handle's key casing when keys are
nested. While Viper is generally case-insensitive, this was not the case
with regards to nested keys. This patch makes nested keys insensitive as
well.
diff --git a/viper.go b/viper.go
index 7c98c6f..4a5b1eb 100644
--- a/viper.go
+++ b/viper.go
@@ -404,7 +404,17 @@
 		return source
 	}
 
-	if next, ok := source[path[0]]; ok {
+	var ok bool
+	var next interface{}
+	for k, v := range source {
+		if strings.ToLower(k) == strings.ToLower(path[0]) {
+			ok = true
+			next = v
+			break
+		}
+	}
+
+	if ok {
 		switch next.(type) {
 		case map[interface{}]interface{}:
 			return v.searchMap(cast.ToStringMap(next), path[1:])
@@ -454,7 +464,7 @@
 	val := v.find(lcaseKey)
 
 	if val == nil {
-		source := v.find(path[0])
+		source := v.find(strings.ToLower(path[0]))
 		if source != nil {
 			if reflect.TypeOf(source).Kind() == reflect.Map {
 				val = v.searchMap(cast.ToStringMap(source), path[1:])