Support lazy referencing

this PR would make the snowcrash able to recognize references which has been defined after the location of the usage. closes issue #84. this PR is not yet ready to merge.
Z says that because of C++98, we can't use strings in enum. So, yeah, we need to do that long if-else loops.