Make heartbeat task requests extend the lease of the owner.

Removes the fire-and-forget status of heartbeat requests. Makes it so heartbeat requests will block and re-raise errors if they don't still have a task lease. This ensures that any processes happening after a heartbeat will definitely still have ownership of the task being processed. This prevents race conditions on the boundary of when a task is about to lose its lease but is still making forward progress.