Implement HTTP GET timespans/descendants

Implement 'timespans/' GET parametre 'descendants', which allows
specifying how many levels of descendants (timespans that have the given
timespan, or one of the given timespans as a parent).

For it to be useful, the 'id' parametre is implemented as well.

Refactor some of 'Tempuhs.Server.Requests.Timespan.timespans' out to its
own module, as the function has become too hairy to be manageable. The
new module is 'Tempuhs.Server.Requests.Timespan.Util'. It requires
'KindSignatures' and 'RankNTypes', so add these extensions. They feature
somewhat excessive type signatures in order to preserve as much
information about them as possible.

In order to test for HTTP GETs of descendants, 'initSubTimeSpan' and
'specialTimespan' had to be generalised to take parent and key IDs.

Signed-off-by: Alexander Berntsen <alexander@plaimi.net>
Signed-off-by: Stian Ellingsen <stian@plaimi.net>
Reviewed-by: Stian Ellingsen <stian@plaimi.net>