Introduce a Duration object

The main purpose of using a pull request for this change is to have one entry point for the discussions leading up to it: https://github.com/cucumber/cucumber/commit/c6535ce8dd20f43dbc9e26081a08f7d48afadcc6#commitcomment-7953669, and on the first commit on this branch, see below.

Detailed description:
Introduce a Duration object in Cucumber::Core::Test::Result

For results which do not have an actual duration (skipped, undefined and pending) instead hold an null object. Client can either use the "null duration" (0), or check if it is an actual duration or an null duration.
@mattwynne sending `.nil?` or `.exist?` is really a type check disguised as a message send.

The example where I've seen it used, something like:

```ruby
unless duration.exist?
  formatter.add_duration duration.duration * 10 ** 9
end
```

I think perhaps we could do something like:

```ruby
duration.with_duration do |milli_secs| # I'm guessing this is what we are storing duration in?
  formatter.add_duration milli_secs * 10 ** 9
end
```

The standard duration could then yield the value to the block, and the unknown duration could be a no-op.

WDYT? /cc @brasmusson