APIClient and APIRequestFactory

Refs #870