Add Values and Printer to give middleware control over Handler return

This moves the return handling functionality from Router into a new Printer() middleware by means of a Values type. This allows other middleware to do things with values returned from the previous handler.

This keeps the functionality of Martini & ClassicMartini functionality identical to the way it is now. Router tests have been updated to reflect the changes, and new tests have been added for Printer().

Printer() also additionally supports String() from fmt.Stringer and []byte.