Break out assemblers

The purpose behind this change is to expose the shared structure between the assemblers, so we can more easily start merging it.  As it is, I did consolidate one measly method (see src/codegen/target/multimethod.h), that was genuinely identical between the targets.  Other stuff will take a little more massaging.

Tested on:
* linux x86_64 (fast, debug, openjdk)
* darwin x86_64
* windows x86
* linux arm
* linux powerpc