Refactor SearchArticlesTask to produce a base ApiTask

Also work around broken ApiResult.cancel()

Change-Id: If62d5e790702ce1707e62c50ce39752ac7d979b3