Add support for functionFS based usb functions

This is a pull request of patch series sent recently to linux-usb which add support for functionfs funcitons. I have placed my branch on top of remove gadget functionality, so please take care of those patches first.

Changes:
Please accept my appologise for closing last pull request it was not my intention. I has been done because git is unable to interpret git push remote remote/branch:other_branch