[BUG] Goroutine leak in signer process

The thornode signer process creates goroutine leaks whenever a timeout occurs before a transaction is signed. This could in some conditions lead to exhaustion of resources. Thornode spawns a process wherein transactions are signed. The function responsible for signing transactions, signAndBroadcast, is sent as a parameter to the runWithContext function along with a context object with a timeout of 5 minutes. Should signAndBroadcast return an error, the error would be received by an unbuffered channel, the function would return, and the goroutine will be destroyed. However, if a transaction is not signed within 5 minutes, the ctx.Done() channel will be read and the function will return without cleaning the goroutine resources. The more this situation occurs, the more resources will be held up by the signer process.

func (s *Signer) runWithContext(ctx context.Context, fn func() error) error {
   ch := make(chan error)
   go func() {
ch <- fn() }()
   select {
   case <-ctx.Done():
       return ctx.Err()
   case err := <-ch:
return err }
}