Use a zipper-like proof state

Proof state now contains the term in focus, its environment, and a path
through the complete term to reach that sub-term. As a result, large
proof terms are now checked more quickly

Cleaned up a couple of other things on the way...
Merge branch 'master' of github.com:idris-lang/Idris-dev
Search subterm for goal first
Save some allocations in updateSolved

Traverse the term to see if any holes need updated. The extra traversal
appears to be worth it, to save allocations when no updates are needed.