Implement timeouts. Use go 1.1 CancelRequest feature if available