Properly constrain folly::Function's generic conversion constructor and fix its noexcept specification
Summary:
The generic conversion constructor for `folly::Function` was not checking that the source object could successfully be copy/move constructed, leading to some `is_constructible` false positives.
Also, the `noexcept` specification on the `Function` constructor wasn't taking into account that the source object might be copied into the Function, instead of moved. The copy could throw.
Reviewed By: yfeldblum
Differential Revision:
D4775037
fbshipit-source-id:
f337b41bf9ac431baa9457a501e63c18ca099e57