Refactor out fresh name prefix extraction logic

As discussed in https://github.com/densh/scala/commit/0bcb907a25fd0688653c497e2d83a7c2c05e8f8e#diff-9b7190b44c5da63343ed67c2bfa6d043R194

1. refactor out FreshNameExtractor out of Quasiquotes cake into SymbolTable (can’t put it outside due to the fact that names are path-dependent)

2. add optional parameter to the fresh name creator to cover additional qq$ prefix needed for quasiquotes

3. add unit tests

review by @retronym