The way these methods were previously defined, we would have to `move`
values into these functions. This was pretty awkward for plain types.
For example, doing a `move` here really doesn't make sense:
int resolution = 123;
promise->resolve(move(resolution));
Let's declare these methods in a manner that allows callers to choose
whether values are moved or copied, using perfect forwarding.