chore(block): Move Block linking code into BlockFactory

The linking of Block to directives used to be in the Block
constructor. This made the constructor dependent on many complex
objects and did work in constructor. By moving the linking
function into BlockFactory it is more logically grouped with
the actual code and it removes complex objects from the Block
constructor dependencies making Block a PoJo.