Do not apply defaults if option value was set from ini

Fixes #120.
diff --git a/ini_test.go b/ini_test.go
index c0073e7..941735e 100644
--- a/ini_test.go
+++ b/ini_test.go
@@ -720,6 +720,46 @@
 	}
 }
 
+func TestIniOverrides(t *testing.T) {
+	file, err := ioutil.TempFile("", "")
+
+	if err != nil {
+		t.Fatalf("Cannot create temporary file: %s", err)
+	}
+
+	defer os.Remove(file.Name())
+
+	_, err = file.WriteString("value-with-default = \"ini-value\"\n")
+	_, err = file.WriteString("value-with-default-override-cli = \"ini-value\"\n")
+
+	if err != nil {
+		t.Fatalf("Cannot write to temporary file: %s", err)
+	}
+
+	file.Close()
+
+	var opts struct {
+		ValueWithDefault            string `long:"value-with-default" default:"value"`
+		ValueWithDefaultOverrideCli string `long:"value-with-default-override-cli" default:"value"`
+	}
+
+	p := NewParser(&opts, Default)
+	err = NewIniParser(p).ParseFile(file.Name())
+
+	if err != nil {
+		t.Fatalf("Could not parse ini: %s", err)
+	}
+
+	_, err = p.ParseArgs([]string{"--value-with-default-override-cli", "cli-value"})
+
+	if err != nil {
+		t.Fatalf("Failed to parse arguments: %s", err)
+	}
+
+	assertString(t, opts.ValueWithDefault, "ini-value")
+	assertString(t, opts.ValueWithDefaultOverrideCli, "cli-value")
+}
+
 func TestWriteFile(t *testing.T) {
 	file, err := ioutil.TempFile("", "")
 	if err != nil {
diff --git a/option.go b/option.go
index b4b867d..a7f4f9a 100644
--- a/option.go
+++ b/option.go
@@ -79,8 +79,9 @@
 	// Determines if the option will be always quoted in the INI output
 	iniQuote bool
 
-	tag   multiTag
-	isSet bool
+	tag            multiTag
+	isSet          bool
+	preventDefault bool
 
 	defaultLiteral string
 }
@@ -182,6 +183,7 @@
 	}
 
 	option.isSet = true
+	option.preventDefault = true
 
 	if len(option.Choices) != 0 {
 		found := false
@@ -245,6 +247,7 @@
 
 func (option *Option) clearDefault() {
 	usedDefault := option.Default
+
 	if envKey := option.EnvDefaultKey; envKey != "" {
 		// os.Getenv() makes no distinction between undefined and
 		// empty values, so we use syscall.Getenv()
diff --git a/parser.go b/parser.go
index 2f74b9a..f2de72c 100644
--- a/parser.go
+++ b/parser.go
@@ -281,7 +281,7 @@
 
 	if s.err == nil {
 		p.eachOption(func(c *Command, g *Group, option *Option) {
-			if option.isSet {
+			if option.preventDefault {
 				return
 			}