Added procedure support

Procedures can have parameters and local variables and can return
values. There's at least one bug still when procedures have other
procedures as arguments