Special equipment: 2 (9-inch) diameter by 1 1/2-inch deep layer pans or 1 (13 by 9 by 2-inch) pan, buttered and bottoms lined with parchment or waxed paper
Set a rack at the middle level of the oven and preheat to 350 degrees. In a large mixing bowl, beat butter and sugar for about 5 minutes, until light and fluffy. Stir together flour, baking powder and salt. Set aside. Combine egg whites, milk and vanilla extract. Add 1/3 of the flour mixture to butter mixture then add half the milk mixture. Continue to alternate beginning and ending with flour mixture. Scrape bowl and beater often. Pour batter into prepared pan(s) and smooth top with a metal spatula. Bake cake(s) about 25 to 30 minutes, or until a toothpick inserted in the center emerges clean. Cool in pan on a rack for 10 minutes. With a thin dowel or thick skewer, poke holes in both cakes. Pour equal amounts of cream of coconut over each cake and let stand in the refrigerator at least 12 hours.
Turn out cakes and revert to right-side-up (help prevent crème of coconut from seeping out of the cakes later).
Beat together the heavy cream, powdered sugar, softened cream cheese and vanilla extract until light and fluffy.
Place one cake layer (top up) on serving tray. Spread a generous layer of frosting over layer (making the surface level). Sprinkle a relatively thick layer of shredded coconut evenly over frosting. Stack second cake layer onto the first. Spread the rest of the frosting over the top and sides of the cake. Pat coconut onto sides into the frosting and cover the top with a generous layer.