Issue title: Event_base_dispatch blocking main thread!
 Issue body: Hi, i am trying to start event base loop in another thread and then after some time I eventually try to exit the loop from main thread. I tried to add a while loop isRunning and call event base loop with EVLOOP_NONBLOCK flag but this solution uses more cpu resources. How can I start the loop async and be able to break the event loop if so?
 Comments: 
 Comment 0: Have you tried breaking the loop via `event_base_loopbreak()`
 Comment 1: > Have you tried breaking the loop via `event_base_loopbreak()`

it dosen't work.
 Comment 2: Are you using the native thread functionality in evhtp?

If so, note that each thread creates its own `event_base` independent of the others. You can do one of the following:

1. Manually break the threads own event base:

```C
struct event_base * base = evthr_get_base(evthr_context);

event_base_loopbreak(base);
```

2. Hard-terminate the entire thread-pool or thread using `evthr_pool_stop` or `evthr_stop`
 Comment 3: Greetings @ipandayu, were you able to look at my reply?

Cheers!
 Comment 4: > Greetings @ipandayu, were you able to look at my reply?
> 
> Cheers!

I always use my way in my first reply,  use event_base_loopbreak in other thread doesn't work
 Comment 5: > > Greetings @ipandayu, were you able to look at my reply?
> > Cheers!
> 
> I always use my way in my first reply, use event_base_loopbreak in other thread doesn't work

Yes, but did you use the thread-specific event_base? Please read the entire reply:

```
struct event_base * base = evthr_get_base(evthr_context); // NOTE THIS STATEMENT HERE

event_base_loopbreak(base);
```
 Comment 6: > > > Greetings @ipandayu, were you able to look at my reply?
> > > Cheers!
> > 
> > 
> > I always use my way in my first reply, use event_base_loopbreak in other thread doesn't work
> 
> Yes, but did you use the thread-specific event_base? Please read the entire reply:
> 
> ```
> struct event_base * base = evthr_get_base(evthr_context); // NOTE THIS STATEMENT HERE
> 
> event_base_loopbreak(base);
> ```

NO, did I misunderstand yr meaning? that's what we usually wrote below:
Main Thread: create and call 
class Server {
 Server() {
   evthread_use_pthreads(); // it's very important in my code
   base_ = event_base_new();
   htp_ = evhtp_new(base_, NULL);
 }
 bool Start() {
   
   evhtp_use_threads_wexit(htp_, init_callback, exit_callback, thread_num, this);
   evhtp_bind_socket(...);
   main_run_loop_ = st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5thread(&Server38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5Run, this);
 }
void Run() {
   event_base_loop(base_, EVLOOP_NO_EXIT_ON_EMPTY);
}
 bool Stop() {
   event_base_loopexit(base_, NULL/*timeout*/);  // sometimes it's useless, blocked
   evhtp_unbind_socket(htp_);
 }
}
{'source': 'GithubIssues', 'repo_name_with_owner': 'criticalstack/libevhtp', 'issue_id': 388211385, 'repo_stars': 376.0}