Added custom name generation logic for basic blocks and functions

Providing this logic makes it so that the name of a given object can be
retrieved without routing the object. The reasons for this may be that the
object that would call the routing doesn't have enough information to correct
construct the knowledge representation of the given object, or the target
object doesn't actually need to be represented in CLIPS beyond it's name.
Modified the BlockAddress population logic to use GetUniqueName

The use of GetUniqueName allows the name of the target basic block and function
to be retrieved without incorrect knowledge generation occurring as a result of
the fact that the BlockAddress is a constant with potentially really strange
parents.