Take build step out of high-level API

This set of commits fixes or at least makes some kind of decision on #173, #165, #157, and possibly some others. This should make things much more clean / obvious for those building new simulators (i.e., @e2crawfo and @xchoo).

This is a big set of commits, so please review it commit-by-commit rather than as a big set of changes. I've made commits such that all of the big moves of  are grouped together, and so it should be easy to see all of the changes that had to happen to get the build step factored out of high-level API. Every commit passes all of the unit tests.

While it's a bit daunting to look at `builder.py`'s 1000+ lines of code, I still think that this is a very positive change. I haven't taken any effort to refactor `Builder`; I just put it all together and reworked a few things so that they would run properly. I suspect that, now that all of this stuff is in a single file, there are many possible ways to reorganize it such that it can be much smaller.