Part 1 of refactor autocomplete

Summary: Adds Typing_hooks. Heavily inspired by ListenerManagers in Java.

Basically, if you're interested in something happening in typing, you register your function, type, and then unregister.
All the gross globals stuff being referenced in typing can use hooks like these instead.

In subsequent diffs, I will remove autocomplete.ml all together. Need to add naming hooks first. (will also remove find_refs.ml etc)

I used lists of functions instead of just a single function because in the IDE world, eventually I'd like get a bunch of different things from one typing of a file for perf reasons. Right now whenever a user types something in the editor, if we want to find out 5 different things, we type 5 the file 5 times, which is pretty wasteful. (This is a legit problem that I need to fix. As we get more and more stuff from hack, the current approach will not scale.)

Reviewed By: julienv, jwatzman

Differential Revision: D1392915