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.
It is best to adhere to the standard protocol. In the back of my head I remember seeing the construct `isNull()` in relation to null objects, but I can tell you that there a lot more search result for having the null object quacking like a real object, than about naming the query to distinguish the null object from a real object.
Fixed in https://github.com/cucumber/cucumber-ruby-core/commit/cc5d1cba301b5f71ff917f2c140381b1d3765bdc and https://github.com/cucumber/cucumber/commit/7b1d1d912da31bdb5d6489ed755a5596d1e59c09