Use BuiltinFunction for all builtins

Replace the uses of AbstractFunction, MixedModeFunction,
SkylarkFunction and SimpleSkylarkFunction by BuiltinFunction.

--
MOS_MIGRATED_REVID=91763158
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index cc14802..8ca1e9e 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -558,13 +558,13 @@
 
   @Test
   public void testDictKeysTooManyArgs() throws Exception {
-    checkEvalError("Invalid number of arguments (expected 0)",
+    checkEvalError("too many (2) positional arguments in call to keys(self: dict)",
         "{'a': 1}.keys('abc')");
   }
 
   @Test
   public void testDictKeysTooManyKeyArgs() throws Exception {
-    checkEvalError("Invalid number of arguments (expected 0)",
+    checkEvalError("unexpected keyword 'arg' in call to keys(self: dict)",
         "{'a': 1}.keys(arg='abc')");
   }
 
@@ -576,8 +576,8 @@
 
   @Test
   public void testArgBothPosKey() throws Exception {
-    checkEvalError("replace(this, old, new, maxsplit = null) got multiple values "
-        + "for keyword argument 'new'",
-        "'banana'.replace('a', 'o', 3, new=4)");
+    checkEvalErrorStartsWith("arguments 'old', 'new' passed both by position and by name "
+        + "in call to replace(self: string, ",
+        "'banana'.replace('a', 'o', 3, old='a', new=4)");
   }
 }