Create an abstraction for user defined data types in Skylark.

This will be used to remove Blaze-specific data types, FilesetEntry, Label and GlobList from the .syntax package.

--
MOS_MIGRATED_REVID=103281375
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FilesetEntry.java b/src/main/java/com/google/devtools/build/lib/syntax/FilesetEntry.java
index 4586b64..c876d63 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/FilesetEntry.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/FilesetEntry.java
@@ -30,7 +30,36 @@
 /**
  * FilesetEntry is a value object used to represent a "FilesetEntry" inside a "Fileset" BUILD rule.
  */
-public final class FilesetEntry {
+@SkylarkModule(
+    name = "FilesetEntry",
+    doc = "",
+    documented = false)
+public final class FilesetEntry implements SkylarkValue {
+
+  @Override
+  public boolean isImmutable() {
+    return false;
+  }
+
+  @Override
+  public void write(Appendable buffer, char quotationMark) {
+      Printer.append(buffer, "FilesetEntry(srcdir = ");
+      Printer.write(buffer, getSrcLabel().toString(), quotationMark);
+      Printer.append(buffer, ", files = ");
+      Printer.write(buffer, Printer.makeStringList(getFiles()), quotationMark);
+      Printer.append(buffer, ", excludes = ");
+      Printer.write(buffer, Printer.makeList(getExcludes()), quotationMark);
+      Printer.append(buffer, ", destdir = ");
+      Printer.write(buffer, getDestDir().getPathString(), quotationMark);
+      Printer.append(buffer, ", strip_prefix = ");
+      Printer.write(buffer, getStripPrefix(), quotationMark);
+      Printer.append(buffer, ", symlinks = ");
+      Printer.append(buffer, quotationMark);
+      Printer.append(buffer, getSymlinkBehavior().toString());
+      Printer.append(buffer, quotationMark);
+      Printer.append(buffer, ")");
+  }
+
   /** SymlinkBehavior decides what to do when a source file of a FilesetEntry is a symlink. */
   public enum SymlinkBehavior {
     /** Just copies the symlink as-is. May result in dangling links. */