Better code completion performance

* cache results between code completion calls so that any given
completion session only needs to retrieve the proposals once