Reverse the order of Fprint output (#43)

Fprint should match the stack output, innermost error first.

It probably doesn't matter as Fprint is going away.
diff --git a/errors.go b/errors.go
index a97116f..e77e394 100644
--- a/errors.go
+++ b/errors.go
@@ -182,24 +182,21 @@
 
 // Fprint prints the error to the supplied writer.
 // If the error implements the Causer interface described in Cause
-// Print will recurse into the error's cause.
-// If the error implements one of the following interfaces:
-//
-//     type Stacktrace interface {
-//            Stacktrace() []Frame
-//     }
-//
-// Print will also print the file and line of the error.
+// Fprint will recurse into the error's cause.
+// Fprint will also print the file and line of the error.
 // If err is nil, nothing is printed.
 //
 // Deprecated: Fprint will be removed in version 0.7.
 func Fprint(w io.Writer, err error) {
-	for err != nil {
-		fmt.Fprintf(w, "%+v\n", err)
-		cause, ok := err.(causer)
-		if !ok {
-			break
+	var fn func(err error)
+	fn = func(err error) {
+		if err == nil {
+			return
 		}
-		err = cause.Cause()
+		if cause, ok := err.(causer); ok {
+			fn(cause.Cause())
+		}
+		fmt.Fprintf(w, "%+v\n", err)
 	}
+	fn(err)
 }
diff --git a/errors_test.go b/errors_test.go
index 8238a85..d3780f1 100644
--- a/errors_test.go
+++ b/errors_test.go
@@ -119,20 +119,29 @@
 		want: "EOF\n",
 	}, {
 		// caused error returns cause
-		err:  &causeError{cause: io.EOF},
-		want: "cause error\nEOF\n",
+		err: &causeError{cause: io.EOF},
+		want: "EOF\n" +
+			"cause error\n",
 	}, {
 		err:  x, // return from errors.New
 		want: "github.com/pkg/errors/errors_test.go:106: error\n",
 	}, {
-		err:  Wrap(x, "message"),
-		want: "github.com/pkg/errors/errors_test.go:128: message\ngithub.com/pkg/errors/errors_test.go:106: error\n",
+		err: Wrap(x, "message"),
+		want: "github.com/pkg/errors/errors_test.go:106: error\n" +
+			"github.com/pkg/errors/errors_test.go:129: message\n",
 	}, {
-		err:  Wrap(Wrap(x, "message"), "another message"),
-		want: "github.com/pkg/errors/errors_test.go:131: another message\ngithub.com/pkg/errors/errors_test.go:131: message\ngithub.com/pkg/errors/errors_test.go:106: error\n",
+		err: Wrap(io.EOF, "message"),
+		want: "EOF\n" +
+			"github.com/pkg/errors/errors_test.go:133: message\n",
 	}, {
-		err:  Wrapf(x, "message"),
-		want: "github.com/pkg/errors/errors_test.go:134: message\ngithub.com/pkg/errors/errors_test.go:106: error\n",
+		err: Wrap(Wrap(x, "message"), "another message"),
+		want: "github.com/pkg/errors/errors_test.go:106: error\n" +
+			"github.com/pkg/errors/errors_test.go:137: message\n" +
+			"github.com/pkg/errors/errors_test.go:137: another message\n",
+	}, {
+		err: Wrapf(x, "message"),
+		want: "github.com/pkg/errors/errors_test.go:106: error\n" +
+			"github.com/pkg/errors/errors_test.go:142: message\n",
 	}}
 
 	for i, tt := range tests {
@@ -198,20 +207,20 @@
 		want []fileline
 	}{{
 		New("ooh"), []fileline{
-			{"github.com/pkg/errors/errors_test.go", 200},
+			{"github.com/pkg/errors/errors_test.go", 209},
 		},
 	}, {
 		Wrap(New("ooh"), "ahh"), []fileline{
-			{"github.com/pkg/errors/errors_test.go", 204}, // this is the stack of Wrap, not New
+			{"github.com/pkg/errors/errors_test.go", 213}, // this is the stack of Wrap, not New
 		},
 	}, {
 		Cause(Wrap(New("ooh"), "ahh")), []fileline{
-			{"github.com/pkg/errors/errors_test.go", 208}, // this is the stack of New
+			{"github.com/pkg/errors/errors_test.go", 217}, // this is the stack of New
 		},
 	}, {
 		func() error { return New("ooh") }(), []fileline{
-			{"github.com/pkg/errors/errors_test.go", 212}, // this is the stack of New
-			{"github.com/pkg/errors/errors_test.go", 212}, // this is the stack of New's caller
+			{"github.com/pkg/errors/errors_test.go", 221}, // this is the stack of New
+			{"github.com/pkg/errors/errors_test.go", 221}, // this is the stack of New's caller
 		},
 	}, {
 		Cause(func() error {
@@ -219,9 +228,9 @@
 				return Errorf("hello %s", fmt.Sprintf("world"))
 			}()
 		}()), []fileline{
-			{"github.com/pkg/errors/errors_test.go", 219}, // this is the stack of Errorf
-			{"github.com/pkg/errors/errors_test.go", 220}, // this is the stack of Errorf's caller
-			{"github.com/pkg/errors/errors_test.go", 221}, // this is the stack of Errorf's caller's caller
+			{"github.com/pkg/errors/errors_test.go", 228}, // this is the stack of Errorf
+			{"github.com/pkg/errors/errors_test.go", 229}, // this is the stack of Errorf's caller
+			{"github.com/pkg/errors/errors_test.go", 230}, // this is the stack of Errorf's caller's caller
 		},
 	}}
 	for _, tt := range tests {
diff --git a/example_test.go b/example_test.go
index 041a75b..57f8021 100644
--- a/example_test.go
+++ b/example_test.go
@@ -49,10 +49,10 @@
 	err := fn()
 	errors.Fprint(os.Stdout, err)
 
-	// Output: github.com/pkg/errors/example_test.go:36: outer
-	// github.com/pkg/errors/example_test.go:35: middle
+	// Output: github.com/pkg/errors/example_test.go:33: error
 	// github.com/pkg/errors/example_test.go:34: inner
-	// github.com/pkg/errors/example_test.go:33: error
+	// github.com/pkg/errors/example_test.go:35: middle
+	// github.com/pkg/errors/example_test.go:36: outer
 }
 
 func ExampleWrapf() {