made IHttpClient a little more flexible, allow Semaphore to be optional