Adding passthrough of timeout, and attach points in the Run method. Clea...

...ning up timer code. Setting default to 30 seconds, and adding debugging to random numbers ample
If we're taking this approach, can we just do the following to simplify?

```csharp
// Wait while not attached and timeout limit hasn't been exceeded yet
while (!_isAttached() && ((DateTime.Now - start).Seconds < timeout)) {
    Thread.Sleep(100);
}
```

This way you don't need a return statement, and it's a bit more readable IMO