Implement Element Attributes

- ASTNode constructor's second argument can now set a node's
  attributes as long as the node's type is not "TEXT". If the
  second object is not a valid object, an empty object shall
  be used instead.

- In case of appending text into the tree, squish consecutive
  text segments together.
- In various ParserBlock and ParserInline methods, defer
  ASTNode creation until it's confirmed to be a valid node.