Specify Y2R behavior using a document in Markdown

This commit adds a document that specifies how Y2R translates various
YCP constructs into Ruby. It serves both as a human-readable
documentation and as an executable specification. Technically, this is
implemented by translating the document from Markdown into RSpec.

This document replaces existing integration tests.
Various spec improvements

Mostly increasing coverage + cleanups.
AST: Kill useless wrapper classes
AST: Process <call> manually

This is a necessary step to get rid of AST::Args.
AST: Kill AST::Args
AST: Process <block> manually

This is a necessary step to get rid of AST::Symbols and AST::Ststements.
AST: Kill AST::Symbols and AST::Statements
AST: Process leaf nodes manually
AST: Kill AST::BuiltinElement, AST::ListElement and AST::YETermElement
AST: Process <if>, <yebinary> and <yebracket> manually

This allows us to get rid of hacks inside AST::If, AST::YEBinary and
AST::YEBracket that dealt with crappy XML structure.
AST: Process collections manually
AST: Process remaining wrappers manually
AST: Process remaining structs manually
AST: Process <symbol> manually
AST: Remove all traces of automatic element processing
AST: Cleanup extract_* methods
AST: Refactor FunDef

Do not store args using a block (which is what XML and presumably YCP
itself does) but using a plain array.
AST: Make Block#kind a symbol

It's more rubyish.
AST: Make Const#type a symbol

It's more rubyish.
Make Block#to_ruby ignore block kind

Since we don't use blocks for function declarations anymore, we can
compile all kinds of blocks the same way.