Use Object.getOwnPropertyNames to find methods

Rather than using Object.assign willy-nilly we prod into the Object to
get all the properties, enumerable or not. This will safeguard against
implementations where static class properties and class prototype
methods are made non enumerable.