Standardize "finish" event behavior

Hello @tylerneylon, 

Please review the following commits I made in branch 'es-finish-event'.

e46e5658d44fa2c006105d194f0e08565643b2d8 (2013-09-13 15:03:49 -0700)
Return parent's end() value
This doesn't do anything useful now, but it seems like a reasonably safe future idea

5153e747818a4651d0bf459772c2d61f4ef447e6 (2013-09-13 15:03:49 -0700)
Add missing param docs

560ef541d2ed1cda7683a8ed65cddc84009a9df4 (2013-09-09 20:20:05 -0700)
Add test case for 'complete' firing before 'finish'

90a27cabf4952a0b375120e84072bab05e9c4996 (2013-09-09 20:20:05 -0700)
Add test case for writes failing after end() is called

37e1544cbb16abf5b5559574d989565b114b256d (2013-09-09 20:20:05 -0700)
Update unit tests for new 'finish' event behavior

b8c12348c19f3a621ab7e2129181a3b74a25a999 (2013-09-09 20:20:05 -0700)
Standardize stream's 'finish' event
Subclass stream.Writable.end so that we can observe when the stream is ending and delay the finish event until the upload is complete


R=@tylerneylon