Work harder to unwrap incoming channels to get their real fileno.

This fixes JRUBY-7173, in which pipe channels are not stat'able
because we simulate fileno rather than providing a real fileno.
This change should work for most native channels; I tested files,
pipes, and sockets. It will work for subprocess channels as well,
but only where they are unwrappable (see note in the commit about
problems unwrapping on Java 7). When we move to a more direct,
native process-launching API we'll be able to do a better job
with those channels.