avoid excessive instantiations of std::declval in Function
avoid excessive instantiations of std::declval in Function

Summary:
It turns out that instantiating this function declaration template so widely measurably affects build speed. Prefer alternative techniques, such as `FOLLY_DECLVAL`.

```name=trunk
$ foundation/scripts/run-perf-compile --syntax folly/futures/test/FutureTest.cpp
     8,462,001,355      instructions:uP
```
```name=branch
$ foundation/scripts/run-perf-compile --syntax folly/futures/test/FutureTest.cpp
     8,362,569,934      instructions:uP
```

Reviewed By: Gownta, luciang

Differential Revision: D32973365

fbshipit-source-id: 6930f75e04e0bb9ac4216b08645e67b98ca2c2f3

facebook/folly,facebook/folly,facebook/folly,facebook/folly,facebook/folly