Cleaned up Solver code
Cleaned up Solver code

- Split build_problem out into a separate function.
- Use a Map rather than a Hashtable for the cache. Makes it easy to get
  a simpler read-only version, once building is complete. Also, saves
  having to sort the results.

bartbes/0install,pombreda/0install,gfxmonk/0install,fdopen/0install,bartbes/0install,HoMeCracKeR/0install,fdopen/0install,dbenamy/0install,gasche/0install,0install/0install,fdopen/0install,bastianeicher/0install,jaychoo/0install,DarkGreising/0install,bhilton/0install,bastianeicher/0install,DarkGreising/0install,jaychoo/0install,dbenamy/0install,0install/0install,bhilton/0install,dbenamy/0install,bastianeicher/0install,gasche/0install,gfxmonk/0install,pombreda/0install,0install/0install,HoMeCracKeR/0install,gasche/0install,HoMeCracKeR/0install,pombreda/0install,jaychoo/0install,gfxmonk/0install,DarkGreising/0install,bhilton/0install,gasche/0install,bartbes/0install