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.
@pksunkara if you think change `SymbolName` to `std::string` seems more suitable it's no problem I'll change it, but I'm still not quite clear about the functionality of `Type` here, what should it be filled with?