Simplify toolchain-variant interface and prepend build_dir to default final_dir

1. Simplify the toolchain-variant interface so that a variant now simply
calls the update_variant() method of a toolchain. For now we can get
away with using MergeFlags() and ParseFlags() in the gcc and clang
toolchains to ensure that the correct flags are added to the correct
environment variable
2. Update all build methods to use a default final_dir that is joined
with the build_dir if the final_dir is relative. Users can override this
themselves so that a user supplied final_dir will be treated as is
3. Add BuildStaticLib() and BuildSharedLib() methods that are aware of
build_dir and final_dir so that they can do the right thing by default
4. Add a new cuppa.add_option() method so users do not need to
explicitly include SCons.Script.AddOption when they want to add options
directly in their sconstruct file