[Fixes #429] FileResult

1) Implemented FilePathResult to efficiently return files from disk.
2) Implemented FileStreamResult to return content from a stream.
3) Implemented FileContentResult to return content from a byte array.
I take it back. It's actually useful for several reasons:
1. A user can derive from it and create a pushstream style file result without getting into trouble.
2. A unit test can verify that a file result was returned and verify it's file name without being concerned about its source.

So keep it.