Don't store all dereference information.

We only use the dereference information to check if a Value is
referenced directly, so just store a hash set of directly referenced
Values.
Change storage of address to pointer lookup.

Store the address to referencing pointer lookup as a vector of
(address, pointer) pairs rather than as a multimap, giving us a
modest performance boost. We sort the vector once when the expansion is
completed (by calling ExpansionImpl::finalize()).
Only add ports which will be used.

We only use points for the head and tail of pointers, so we only need
ports for values which are pointers, or which are directly referenced by
a pointer.
Remove unused custom port support.
Use llvm::DenseMap for Value -> port lookup.
Show unreferenced user-created streams.

This allows students to see that a FILE stream has remained open. We
still hide the standard streams if they're unreferenced, because we
don't want them to be visible before students are introduced to them.
Remove temporary debugging print.