ENH: Allow one to replace the annotation functions.

Step 1 in my master plan for data-rich export. I was thinking about making a rich `AnnotatedGraph` where each edge and vertex would be annotated with a dict with more metadata (`sys.getsizeof()`, mro of its type, length if it has one, shape and dtype for `ndarray`s, etc.). Then I can output the edges and rows of the `AnnotatedGraph` as [JSON Lines](http://jsonlines.org/), one edge or vertex per line. Reconstructing the enriched `AnnotatedGraph` is straightforward; then we can do lots of queries off-line on that `AnnotatedGraph` rather than the `ObjectGraph` (e.g. find all of the Enable `Component`s and their referrers).