Clone Period Dates

For a time period, the `getBegin()` and `getEnd()` methods should return cloned versions of the periods begin and end times, not the date objects themselves.

At present, changing an object returned from either one of these objects changes the time period itself which should be done manually via other methods, or creating a new period via the Factory.