[core] Refactor RowList with self-type trick on append/labeling operation.

```java
// Before this change
RowList1<String> l1 = new RowList1<String>(String.class);
RowList<Row1<A>> l1updated = l1.append("str");
// Self-type RowList1<A> of l1 is lost in append operation

// Now
RowList1.Impl<String> l2 = new RowList1.Impl<String>(String.class);
RowList1.Impl<String> l2updated = l2.append("str");
// Implementation self-type is kept
```
WIP: Refactor Scala RowList with self-types, for better implicits (operation on ScalaRowList returning ScalaRowList, not core RowList which would be converted again on next operation)
Remove useless internal Cell type