Extended assembler to allow fabricated instructions

I've tried to add fabricated instructions such as "halt", "ret", "nop" and instructions with implicit operands such as "call" and "ld". I had to add quite a few more encoding into the assembler to cover these, so I also tried to make the assembler more extendable in that regard.

Let me know your thoughts on this. 
For type safety, I might recommend this instead. It ensures that there was only 1 correct encoding

```
getIns pc ins vars = case (rights encodings, lefts encodings) of
   ([encoding], _) -> Right encoding
   ([], (err:errs)) -> Left err
   _ -> Left $ "Invalid instruction: " ++ show ins ++ " with " ++ show vars
```