factorial using pattern matching and recursion

also fix the factorial unit test, which was testing ! twice,
but not testing !2
fix fibonacci tests