text: Title: Evaluating and saving checkpoints within an epoch
  Body: **Is your feature request related to a problem? Please describe.**
  
  Right now, allennlp currently evaluates / saves checkpoints at the end of every epoch. However, it'd be nice if there was some way of evaluating within an epoch.  For example, say an epoch is 10,000 steps, and I want to evaluate / save a checkpoint every 500 steps.
  
  This is especially important when fine-tuning pre-trained language models. Often, the optimal checkpoint does not occur at the end of an epoch, and models can quickly overfit. For example, the huggingface default scripts save checkpoints every 500 steps. it'd be nice to have some sort of similar option for allennlp.
  
  **Describe the solution you'd like**
  perhaps the checkpointing side of this could be controlled by the checkpointer, similar to how `keep_serialized_model_every_num_seconds` exists. Perhaps `keep_serialized_model_every_num_steps`. However, maybe there needs to be analogous argument in the `Trainer` for evaluation.