Generalize elides to any IFn rather than a set

This patch allows the elides variable to hold an arbitrary IFn rather than a
set. This allows for finer grained control of what metadata (or none) is
allowed to exist in elided ASTs. For instance an elides of #{} or
(constantly false) will have all metadata, where an ast shaken with an elides
value of (constantly true) will have absolutely no metadata.