Returns a Future that resolves after Duration 
and optionally calls before and after the Duration.
Source
Future timeout(Duration duration, {Function before, Function after}) async
{
    if ( before != null ) before();
    await wait(duration);
    if ( after  != null ) after();
}