Optimized accessing reference assemblies

- Lazily resolve a target framework at a time as well as the assemblies
within those target frameworks.
- This helps to reduce the amount of IO that happens when compiling.