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.
First of all, This whole function should be about reference_type and yeah, the double `reference` look weird. But if it is giving a problem with the types, keep it.