preserve func expression to make Func.String() faster.

maybe better to revisit it's worth doing.

before:
% ./run_integration_test.rb android
tar -xzf ../android.tgz
Running make for android... 5.78 secs
Running kati for android... 62.50 secs
android: OK

PASS!

after:
% ./run_integration_test.rb android
tar -xzf ../android.tgz
Running make for android... 5.85 secs
Running kati for android... 61.93 secs
android: OK

PASS!
diff --git a/expr_test.go b/expr_test.go
index e0bdf5b..0cf245a 100644
--- a/expr_test.go
+++ b/expr_test.go
@@ -63,6 +63,7 @@
 								varname: literal("foo"),
 							},
 						},
+						expr: "$(subst $(space),$(,),$(foo))",
 					},
 				},
 				literal("/bar"),
@@ -86,6 +87,7 @@
 							},
 						},
 					},
+					expr: "$(subst $(space),$,,$(foo))",
 				},
 			},
 		},
@@ -96,16 +98,18 @@
 					args: []Value{
 						literal("echo '()'"),
 					},
+					expr: `$(shell echo '()')`,
 				},
 			},
 		},
 		{
-			in: `$(shell echo '()')`,
+			in: `${shell echo '()'}`,
 			val: &funcShell{
 				fclosure: fclosure{
 					args: []Value{
 						literal("echo '()'"),
 					},
+					expr: `${shell echo '()'}`,
 				},
 			},
 		},
@@ -117,6 +121,7 @@
 						args: []Value{
 							literal("echo '"),
 						},
+						expr: `$(shell echo ')`,
 					},
 				},
 				literal("')"),
@@ -129,6 +134,7 @@
 					args: []Value{
 						literal("echo ')'"),
 					},
+					expr: `${shell echo ')'}`,
 				},
 			},
 		},
@@ -140,6 +146,7 @@
 						args: []Value{
 							literal("echo '"),
 						},
+						expr: `${shell echo '}`,
 					},
 				},
 				literal("'}"),
@@ -152,6 +159,7 @@
 					args: []Value{
 						literal(`make --version | ruby -n0e 'puts $_[/Make (\d)/,1]'`),
 					},
+					expr: `$(shell make --version | ruby -n0e 'puts $$_[/Make (\d)/,1]')`,
 				},
 			},
 		},