Doug, had the same thoughts you did on whether or not all the classes really need to have all the region servers, etc.
With the reusability, in some cases I have some doubts about what is actually practical. In some cases (eg. coproc), they are doing a bunch of configuration on the table, which has implications on whether or not the table/cluster can be immediately/concurrently reused.
There are a couple things we could do to make usage easier.
(1) A lot of times people are setting the configuration statically, so we want to remove that if people are going to reuse it (though different jvms solves that for the moment).
(2) Create unique clusters - these would not be cached and really good for situations where people are injecting faults, etc.
(3) Add some modularization for table configuration etc - a lot seems to be setting up properties for the db, but really making properties that you are just testing on some table. This may be a little pie in the sky...
(4) Reset properties method - so are allowed to make changes to a table when you use it, but then when done/released, we just reset the properties/config.