text: Title: HTTP Client next steps
  Body: I'm happy to see that #66 got merged! Great work @RobertCraigie 
  
  A couple of thoughts I was having from that PR:
  
  - The HTTP client implementations could be private so that if in the future you migrate to Rust bindings or make other changes, they are not breaking changes.
  - If the HTTP client is private, and since only HTTPX is being used now, the generic HTTP abstraction layer could be removed (just to simplify the code, no changes for users) and just rely on HTTPX's interfaces.
  - Since there are no longer extra dependencies, client generator configuration could be simplified further by removing the `interface` option and generating both sync and async clients every time (simpler codebase, simpler for users, only con is some extra code that may not be used). Taking this a step further, some things could be moved from code generation to hardcoded real code (which makes it more testable). Alternatively, you could keep the option, but just make the default "both", which makes things simpler for users, but not really any simpler for the project.