Change ViewableCodeBlock to be a protocol

ViewableCodeBlock had been an abstract class so subclasses didn't have
to impliment the properties. I'm creating an abstract subclass of
CodeBlock for composite code blocks so ViewableCodeBlock could not
remain as an absract class.