Import zfs_holey() from Open Solaris

This is prerequisite to adding support for SEEK_DATA/SEEK_HOLE to the
ZPL. It is split into its own commit for proper attribution.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Reviewed-by: Richard Laager <rlaager@wiktel.com>
SEEK_DATA/SEEK_HOLE support

This adds SEEK_DATA/SEEK_HOLE to fseek()/lseek()/llseek().

This is a heavily revised version of the patch proposed in
zfsonlinux/zfs#1516. The original message by Li Dongyang was:

```
Add SEEK_DATA/SEEK_HOLE by creating our own zpl_file_llseek().
Tested with xfstests 285 and 286. test0[7-9] of 285 will try to reserve
the blocks first via fallocate(2), we will fail there as currently we
don't support that.
```

My revisions address some issues that I spotted and also some things
that were spotted upon review by Richard Laager. The behavior on errors
has been altered to match the Solaris version, which is where this
extension was invented. It should still pass the XFS tests, but I am not
setup to verify that. The zfs_holey() function from Open Solaris was
moved to its own commit for attribution purposes.

Note that the filp->f_lock spinlock did not exist prior to Linux 2.6.30,
but we avoid the need for autotools check by virtue of the fact that
SEEK_DATA/SEEK_HOLE support was not added until Linux 3.1.

Closes zfsonlinux/zfs#1384

Original-patch-by: Li Dongyang <dongyang.li@anu.edu.au>
Signed-off-by: Richard Yao <ryao@gentoo.org>
Reviewed-by: Richard Laager <rlaager@wiktel.com>