Feature/issue 1031 nested reverse mode autodiff

#### Summary:

Adds the ability to do nested reverse-mode autodiff, which is necessary for the ODE integrator.

#### Intended Effect:

Allow nested reverse-mode.  In the middle of a reverse mode, mark the position, do another reverse mode, then pop back to where you were.

#### How to Verify:

New unit tests for nested behavior. 

#### Side Effects:

Yes.  It removes the `recover_memory()` call from `grad()`, which moves responsibility for recovering memory back to the calling function.  

It also makes the recovery of memory more robust in `agrad/autodiff.hpp` with proper try/catch behavior.

#### Documentation:

Not user facing.

#### Reviewer Suggestions:

Anyone familiar with the guts of reverse-mode autodiff.
Same issue with `recover_all` as `recover_memory`? Shouldn't the `nested_cur_blocks_`, `nested_next_locs_` and `nested_cur_block_ends_` be set to zero size?