implement Connection.lastModifiedImpl

Here's an implementation of Connection.lastModifiedImpl that stores a "stat" structure (whose only property so far is "mtime") in asyncStorage at the location "!" + path. Suggestions for improvements to how we store the structure are welcome! I'm also not very happy with the callback hell in fstests.js. Maybe those should be a sequence of separate test functions.
I got it from reading the [specification](https://jcp.org/en/jsr/detail?id=75), but it's also in the [reference implementation](http://www.ibm.com/developerworks/library/specification/j-pda-op/), in the Java method *Connection.truncate*, which returns early, before calling the *truncateImpl* native, if `offset >= fileSize()`.

There's also a code comment on the abstract method *FileConnection.truncate* (which is implemented by *Connection.truncate*) that says, "If the byte offset provided is greater than or equal to the file's current byte count, the method returns without changing the file."

(FWIW, the behavior of *ftruncate* is inconsistent across platforms, according to various web resources, as some filesystems don't support using it to extend a file. And the common case is to use truncate to reduce the size of a file. So perhaps this method was designed to provide a consistent API across platforms.)