Add macro support

@tlunter 
- Fixed a bug in `lazy-let`
- Changed `def` to `defun`
- Added `defmacro`