fs: fix fs.readFileSync fd leak when get RangeError

The `new Buffer(size)` will throw RangeError when size grater than 1GB. Need close the fd here.
@chrisdickinson @cjihrig I also have been pretty sure for a while that it's the `try` that marks the function as unoptimizable. It's worth seeing what happens anyway, though, no?

Also, I heard from a little birdie (named @domenic) that V8 HEAD can now optimize try / catch / finally, so at some point in the future this code will all need to be reassessed anyway.