Added interfaces GetF and PutF

GetF is like Get but with a notEmpty() method.
PutF is like Put but with a notFull() method.

Add ToGetF and ToPutF typeclasses, defined on FIFOF.

Added mkConnection instance for GetF/PutF.

Added toGet and toPut instances for GetF and PutF.

Change-Id: I3568bb2fa04aa246a1c70bad58205a1bc762418e
Changed DMA interfaces to use GetF and PutF

This is helpful for arbiters, for example, which need to know if there is a request available or space
available for putting a response.

Change-Id: I83d19bd4ff1ccffb243a026f045d0c01e1d544d3