These objects have very similar information. CriteriaContext can be removed in favor of using RequestContext. That I for sure intend to refactor once enhanced templates are implemented.
RequestInfo is also the information in RequestContext plus some timestamps. It's worth exploring if there can be some simplification there. It might just be a matter of what fields in RequestContext are persisted to a database table.
ScheduleContext should continue to exist, with refactoring, because it is the RequestContext + a number of parameters the caller is passing in as part of the REST request (so possibly it can be refactored to be a more straightforward parameter object).