Broader tests
Extends the ulid constructors to take supplied values for the time , and also the RNG function. With this change it is possible to request an extremely predictable ULID, so we can take advantage of this to build test cases that make a predictable ULID and then check that the generated value meets our expectations