APIClient and APIRequestFactory

Refs #970