Add readonly/readnone as function attributes
Restructure IrFunction in prep for call instr

- Add IrCallableLike trait that contains just the parts of the function
  declaration that the call instruction needs

- Add IrCallable case class that strictly implements IrCallableLike

- Add IrFunctionDeclLike that implements IrCallableLike and replaces the
  old IrFunction

- Add an IrFunctionDeclLike.irValue that returns a function pointer to
  the declaration
Implement call instruction generation

This should cover all possible call syntaxes except for:
- Discarding the result of non-void calls
- Any attributes that are otherwise unimplemented