refactor command/gem details into implementation classes
add special cased markdown implementation