Fix default values for custom fields

Fallback to the original default detection logic if we have an unknown
type.

Fixes #91
diff --git a/flag.go b/flag.go
index c28f3bd..b0b0d46 100644
--- a/flag.go
+++ b/flag.go
@@ -437,7 +437,17 @@
 	case *intSliceValue, *stringSliceValue, *stringArrayValue:
 		return f.DefValue == "[]"
 	default:
-		return true
+		switch f.Value.String() {
+		case "false":
+			return true
+		case "<nil>":
+			return true
+		case "":
+			return true
+		case "0":
+			return true
+		}
+		return false
 	}
 }
 
diff --git a/flag_test.go b/flag_test.go
index 1befb94..b294fc7 100644
--- a/flag_test.go
+++ b/flag_test.go
@@ -891,6 +891,7 @@
       --StringSlice stringSlice   string slice with zero default
       --Z int                     an int that defaults to zero
       --custom custom             custom Value implementation
+      --customP custom            a VarP with default (default 10)
       --maxT timeout              set timeout for dial
 `
 
@@ -934,6 +935,9 @@
 	var cv customValue
 	fs.Var(&cv, "custom", "custom Value implementation")
 
+	cv2 := customValue(10)
+	fs.VarP(&cv2, "customP", "", "a VarP with default")
+
 	fs.PrintDefaults()
 	got := buf.String()
 	if got != defaultOutput {