Fix for issue-1075 - Move CreateSerializer out of the base class

This is a small refactor as a precursor for api-explorer work.

This adds a virtual `CanWriteType` method to `OutputFormatter` which our xml formatters use to determine which types they can and cannot serialize.
unrelated directly to this PR, noticed that 3 other formatters use runtimetype here instead of instancetype (which is the correct use as defined on the interface). If you want to update as part of this PR go ahead, if not open up a follow up issue. The concern is named parameters might break (but I'm not sure if it's actually broken when you have the interface passed around).