Use the "composition over inheritance" technique

Instead of inheriting from `Array`, let's create an attribute that is an
array. The current object doesn't fit with the Liskov substitution
principle as, for instance, #sort is broken on Rubinius.

This makes the `PartsList` class compatible with Rubinius as `undef map`
will remove the map method but some other Enumerable methods (e.g. sort)
rely on it.
Add a fallback for Array methods

For the sake of backward compatibility, we need to provide a fallback
for missing method that may be used in the existing libraries.

To avoid all the necessary boilerplate to provide such fallback, let's
rely on the standard library's delegate gem and its DelegateClass
method.
Let's remove Rubinius from the allowed failures
Make YAML serialization backward-compatible

Previously, the object would have been serialized as an Array even
though YAML wouldn't be able to round-trip. Let's keep this behavior for
now to make upgrade smoother to this new "layer".