Overload delay() to accept regular functions or closures

Enables the following:

```swift
let greeting = delay { () -> String in
  sleep(1)
  return "Hello, world!"
}

func expensiveComputation() -> Int
let result = delay(expensiveComputation) // => passing a reference to the function, rather than wrapping its invocation in a closure
```

Also, now compiles on beta 4.