Is it possible to have Smooth Shading on by default?
It is kind of possible to write an add-on for this with Python. There does not seem to be a nice way to trigger an operator(what smooth shading is in Blender apparently) every time an object is created, but it is possible to check the count of objects in the file every time scene is updated. Scene gets updated all the time so that is a whole lot of unnecessary checks, but it seems there is no nice or elegant way to do this. I am not entirely sure I can honestly recommend using it but this hack seems to work and it's the only way to do it I can think of. It shades anything new to the scene smooth. Pasting and duplicating will trigger it as well. You can save it to a .py file and install it as an add-on if you really need this functionality. You may also want to do something about ugly shading with sharp edges so you may want to uncomment the line enabling auto smooth. 

bl_info = {
    "name": "Smooth shade new objects",
    "author": "-",
    "version": (1, 0),
    "blender": (2, 79, 0),
    "location": "Works every time new objects are added",
    "description": "Shades everything added to the scene smooth",
    "warning": "",
    "wiki_url": "",
    "category": "Mesh",
    }

import bpy
from bpy.app.handlers import persistent

bpy.last_count = 0

@persistent
def smooth_handler(dummy):

    if len(bpy.data.objects) &lt; bpy.last_count:
        bpy.last_count = len(bpy.data.objects)
    elif len(bpy.data.objects) &gt; bpy.last_count:
        bpy.last_count = len(bpy.data.objects)
        if bpy.context.object != None:
            #bpy.context.object.data.use_auto_smooth = True 
            bpy.ops.object.shade_smooth()



def register():
    bpy.app.handlers.scene_update_post.clear()
    bpy.app.handlers.scene_update_post.append(smooth_handler)

def unregister():
    bpy.app.handlers.scene_update_post.clear()

if __name__ == "__main__":
    register()